Skip to content

perf(parquet): Optimize DeltaByteArrayEncoder and friends#10412

Open
MassivePizza wants to merge 11 commits into
apache:mainfrom
massive-com:optimize-delta-byte-array-encoder
Open

perf(parquet): Optimize DeltaByteArrayEncoder and friends#10412
MassivePizza wants to merge 11 commits into
apache:mainfrom
massive-com:optimize-delta-byte-array-encoder

Conversation

@MassivePizza

@MassivePizza MassivePizza commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

N/A

Rationale for this change

In our case, improve performance for delta-encoded decimals.

What changes are included in this PR?

Reduce allocs and copies when delta-encoding byte-arrays.

Also removed some suspicious #[cold] attributes on Encoder::encoding.

Are these changes tested?

Encoder correctness should be covered by existing tests.
I can add benchmarks if desired, since the removal of byte array copies is a nice win (especially combined with #10364).

Are there any user-facing changes?

parquet::encodings::encoding::Encoder has a new flush_to function, but the module is gated behind the experimental feature. I can rewrite it to make flush_to a default method if needed.

@github-actions github-actions Bot added the parquet Changes to the parquet crate label Jul 22, 2026
@MassivePizza
MassivePizza marked this pull request as ready for review July 23, 2026 12:18
@Jefffrey

Copy link
Copy Markdown
Contributor

run benchmark arrow_writer

@adriangbot

This comment was marked as duplicate.

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark completed (GKE) | trigger

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

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

group                                              main                                   optimize-delta-byte-array-encoder
-----                                              ----                                   ---------------------------------
bool/bloom_filter                                  1.00     12.9±0.03ms    19.3 MB/sec    1.01     13.0±0.07ms    19.2 MB/sec
bool/cdc                                           1.00     15.7±0.08ms    16.0 MB/sec    1.03     16.1±0.10ms    15.6 MB/sec
bool/default                                       1.00     10.8±0.05ms    23.1 MB/sec    1.01     10.9±0.07ms    22.9 MB/sec
bool/parquet_2                                     1.00     14.6±0.07ms    17.1 MB/sec    1.01     14.7±0.11ms    17.0 MB/sec
bool/zstd                                          1.00     11.4±0.04ms    22.0 MB/sec    1.01     11.5±0.08ms    21.8 MB/sec
bool/zstd_parquet_2                                1.00     15.0±0.05ms    16.6 MB/sec    1.01     15.1±0.15ms    16.5 MB/sec
bool_non_null/bloom_filter                         1.00      7.1±0.03ms    17.7 MB/sec    1.01      7.1±0.03ms    17.5 MB/sec
bool_non_null/cdc                                  1.00      6.8±0.03ms    18.4 MB/sec    1.01      6.9±0.03ms    18.1 MB/sec
bool_non_null/default                              1.00      4.3±0.02ms    29.0 MB/sec    1.01      4.3±0.03ms    28.8 MB/sec
bool_non_null/parquet_2                            1.00      9.0±0.03ms    13.9 MB/sec    1.01      9.0±0.03ms    13.8 MB/sec
bool_non_null/zstd                                 1.00      4.7±0.03ms    26.8 MB/sec    1.01      4.7±0.02ms    26.6 MB/sec
bool_non_null/zstd_parquet_2                       1.00      9.4±0.03ms    13.3 MB/sec    1.00      9.5±0.04ms    13.2 MB/sec
bool_ree/bloom_filter                              1.00     30.4±0.15ms     7.0 MB/sec    1.01     30.6±0.23ms     7.0 MB/sec
bool_ree/cdc                                       1.00     31.6±0.06ms     6.7 MB/sec    1.02     32.2±0.11ms     6.6 MB/sec
bool_ree/default                                   1.00     27.7±0.04ms     7.7 MB/sec    1.01     28.0±0.22ms     7.6 MB/sec
bool_ree/parquet_2                                 1.00     29.3±0.09ms     7.3 MB/sec    1.01     29.5±0.20ms     7.2 MB/sec
bool_ree/zstd                                      1.00     28.3±0.09ms     7.5 MB/sec    1.01     28.5±0.20ms     7.5 MB/sec
bool_ree/zstd_parquet_2                            1.00     29.6±0.10ms     7.2 MB/sec    1.01     29.8±0.22ms     7.2 MB/sec
decimal/bloom_filter                               1.00    149.4±0.92ms   401.5 MB/sec    1.01    151.2±1.64ms   396.8 MB/sec
decimal/cdc                                        1.01    132.7±0.52ms   452.1 MB/sec    1.00    132.0±0.23ms   454.6 MB/sec
decimal/default                                    1.00    106.6±0.44ms   563.0 MB/sec    1.01    107.9±1.77ms   556.1 MB/sec
decimal/parquet_2                                  1.00    273.5±1.11ms   219.4 MB/sec    1.04    283.8±2.00ms   211.5 MB/sec
decimal/zstd                                       1.00    117.5±0.40ms   510.9 MB/sec    1.01    118.5±1.70ms   506.2 MB/sec
decimal/zstd_parquet_2                             1.00    293.8±1.14ms   204.2 MB/sec    1.05    307.8±1.86ms   194.9 MB/sec
fixed_size_binary_ree/bloom_filter                 1.00     68.9±0.20ms    14.6 MB/sec    1.01     69.9±0.65ms    14.4 MB/sec
fixed_size_binary_ree/cdc                          1.00     72.9±0.17ms    13.8 MB/sec    1.00     72.8±0.25ms    13.8 MB/sec
fixed_size_binary_ree/default                      1.00     62.0±0.23ms    16.2 MB/sec    1.01     62.6±0.53ms    16.1 MB/sec
fixed_size_binary_ree/parquet_2                    1.00     78.5±0.34ms    12.8 MB/sec    1.01     79.5±0.59ms    12.7 MB/sec
fixed_size_binary_ree/zstd                         1.00     67.4±0.21ms    14.9 MB/sec    1.01     68.3±0.56ms    14.7 MB/sec
fixed_size_binary_ree/zstd_parquet_2               1.00     78.8±0.18ms    12.8 MB/sec    1.02     80.0±0.60ms    12.6 MB/sec
float_with_nans/bloom_filter                       1.00     93.3±0.44ms   150.0 MB/sec    1.01     94.1±0.80ms   148.8 MB/sec
float_with_nans/cdc                                1.00     81.0±0.41ms   172.9 MB/sec    1.01     81.4±0.20ms   172.0 MB/sec
float_with_nans/default                            1.00     73.9±0.14ms   189.5 MB/sec    1.01     74.4±0.82ms   188.0 MB/sec
float_with_nans/parquet_2                          1.00     95.1±0.51ms   147.2 MB/sec    1.00     95.5±0.90ms   146.6 MB/sec
float_with_nans/zstd                               1.00    111.9±0.22ms   125.1 MB/sec    1.01    112.6±0.83ms   124.4 MB/sec
float_with_nans/zstd_parquet_2                     1.00    132.1±0.30ms   106.0 MB/sec    1.00    132.5±0.91ms   105.7 MB/sec
fsb/bloom_filter                                   1.00      9.5±0.05ms  1691.6 MB/sec    1.01      9.6±0.06ms  1681.7 MB/sec
fsb/cdc                                            1.00     12.0±0.05ms  1340.3 MB/sec    1.01     12.2±0.06ms  1323.6 MB/sec
fsb/default                                        1.00      8.3±0.04ms  1935.4 MB/sec    1.00      8.4±0.06ms  1926.9 MB/sec
fsb/parquet_2                                      1.02     18.5±0.11ms   873.6 MB/sec    1.00     18.1±0.13ms   892.1 MB/sec
fsb/zstd                                           1.01     10.8±0.08ms  1489.9 MB/sec    1.00     10.8±0.06ms  1498.6 MB/sec
fsb/zstd_parquet_2                                 1.01     19.2±0.09ms   839.0 MB/sec    1.00     19.0±0.24ms   849.4 MB/sec
int32_ree/bloom_filter                             1.00     40.3±0.33ms    10.1 MB/sec    1.00     40.2±0.19ms    10.1 MB/sec
int32_ree/cdc                                      1.00     40.3±0.14ms    10.1 MB/sec    1.00     40.4±0.10ms    10.1 MB/sec
int32_ree/default                                  1.00     36.2±0.10ms    11.2 MB/sec    1.00     36.1±0.05ms    11.3 MB/sec
int32_ree/parquet_2                                1.00     36.3±0.08ms    11.2 MB/sec    1.00     36.2±0.09ms    11.2 MB/sec
int32_ree/zstd                                     1.01     36.9±0.12ms    11.0 MB/sec    1.00     36.7±0.15ms    11.1 MB/sec
int32_ree/zstd_parquet_2                           1.00     36.7±0.07ms    11.1 MB/sec    1.00     36.6±0.11ms    11.1 MB/sec
int32_ree_95pct_null/bloom_filter                  1.01     21.9±0.04ms    18.6 MB/sec    1.00     21.7±0.02ms    18.7 MB/sec
int32_ree_95pct_null/cdc                           1.00     24.1±0.06ms    16.9 MB/sec    1.00     24.2±0.04ms    16.8 MB/sec
int32_ree_95pct_null/default                       1.00     21.5±0.02ms    18.9 MB/sec    1.00     21.4±0.02ms    19.0 MB/sec
int32_ree_95pct_null/parquet_2                     1.00     21.5±0.03ms    18.9 MB/sec    1.00     21.4±0.02ms    19.0 MB/sec
int32_ree_95pct_null/zstd                          1.01     21.8±0.03ms    18.7 MB/sec    1.00     21.7±0.01ms    18.8 MB/sec
int32_ree_95pct_null/zstd_parquet_2                1.00     21.7±0.03ms    18.8 MB/sec    1.00     21.6±0.02ms    18.8 MB/sec
large_string_non_null/bloom_filter                 1.00     72.4±0.14ms     3.5 GB/sec    1.02     74.2±0.16ms     3.4 GB/sec
large_string_non_null/cdc                          1.00    244.1±1.50ms  1048.9 MB/sec    1.01    246.4±1.35ms  1039.0 MB/sec
large_string_non_null/default                      1.00     54.6±0.12ms     4.6 GB/sec    1.04     56.6±0.20ms     4.4 GB/sec
large_string_non_null/parquet_2                    1.00     54.7±0.12ms     4.6 GB/sec    1.03     56.3±0.12ms     4.4 GB/sec
large_string_non_null/zstd                         1.00     54.7±0.13ms     4.6 GB/sec    1.03     56.3±0.12ms     4.4 GB/sec
large_string_non_null/zstd_parquet_2               1.00     54.6±0.10ms     4.6 GB/sec    1.03     56.3±0.10ms     4.4 GB/sec
list_nested/bloom_filter                           1.00    149.2±0.20ms   193.4 MB/sec    1.02    152.0±0.56ms   189.9 MB/sec
list_nested/cdc                                    1.00    165.1±0.17ms   174.7 MB/sec    1.01    166.0±0.19ms   173.8 MB/sec
list_nested/default                                1.00    133.5±0.19ms   216.1 MB/sec    1.00    133.9±0.21ms   215.5 MB/sec
list_nested/parquet_2                              1.00    146.9±0.37ms   196.4 MB/sec    1.00    147.5±0.23ms   195.6 MB/sec
list_nested/zstd                                   1.00    142.8±0.17ms   202.1 MB/sec    1.01    143.5±0.18ms   201.0 MB/sec
list_nested/zstd_parquet_2                         1.00    159.6±0.21ms   180.8 MB/sec    1.01    160.5±0.26ms   179.8 MB/sec
list_primitive/bloom_filter                        1.00    287.8±1.12ms  1895.0 MB/sec    1.13   324.6±14.14ms  1679.9 MB/sec
list_primitive/cdc                                 1.00    316.5±0.66ms  1723.1 MB/sec    1.06   335.7±14.05ms  1624.8 MB/sec
list_primitive/default                             1.00    205.4±2.10ms     2.6 GB/sec    1.15   237.0±15.01ms     2.2 GB/sec
list_primitive/parquet_2                           1.00    228.1±0.40ms     2.3 GB/sec    1.24    283.8±1.12ms  1921.5 MB/sec
list_primitive/zstd                                1.00    460.6±2.45ms  1184.1 MB/sec    1.08    497.9±4.46ms  1095.3 MB/sec
list_primitive/zstd_parquet_2                      1.00    451.8±0.57ms  1207.1 MB/sec    1.03    466.0±5.95ms  1170.2 MB/sec
list_primitive_non_null/bloom_filter               1.00    405.9±3.56ms  1340.8 MB/sec    1.09   440.4±27.97ms  1235.7 MB/sec
list_primitive_non_null/cdc                        1.00   403.5±10.19ms  1348.9 MB/sec    1.00   402.2±10.71ms  1353.0 MB/sec
list_primitive_non_null/default                    1.00    264.5±3.68ms     2.0 GB/sec    1.16   306.8±20.62ms  1774.1 MB/sec
list_primitive_non_null/parquet_2                  1.00    298.1±0.89ms  1825.7 MB/sec    1.18    352.8±1.39ms  1542.7 MB/sec
list_primitive_non_null/zstd                       1.00    690.9±1.66ms   787.7 MB/sec    1.08    745.8±8.97ms   729.8 MB/sec
list_primitive_non_null/zstd_parquet_2             1.00    677.5±5.65ms   803.3 MB/sec    1.02   690.7±43.70ms   788.0 MB/sec
list_primitive_sparse_99pct_null/bloom_filter      1.00     12.8±0.04ms     2.9 GB/sec    1.00     12.8±0.08ms     2.8 GB/sec
list_primitive_sparse_99pct_null/cdc               1.00     24.3±0.09ms  1534.6 MB/sec    1.01     24.5±0.06ms  1523.7 MB/sec
list_primitive_sparse_99pct_null/default           1.00     12.4±0.02ms     2.9 GB/sec    1.01     12.5±0.08ms     2.9 GB/sec
list_primitive_sparse_99pct_null/parquet_2         1.00     12.5±0.05ms     2.9 GB/sec    1.00     12.5±0.09ms     2.9 GB/sec
list_primitive_sparse_99pct_null/zstd              1.00     14.4±0.07ms     2.5 GB/sec    1.00     14.4±0.10ms     2.5 GB/sec
list_primitive_sparse_99pct_null/zstd_parquet_2    1.00     12.6±0.09ms     2.9 GB/sec    1.01     12.7±0.09ms     2.9 GB/sec
list_struct_with_list/bloom_filter                 1.00    285.0±0.50ms   160.0 MB/sec    1.01    289.2±0.68ms   157.7 MB/sec
list_struct_with_list/cdc                          1.00    324.6±1.09ms   140.5 MB/sec    1.00    325.5±0.50ms   140.1 MB/sec
list_struct_with_list/default                      1.00    257.9±0.40ms   176.8 MB/sec    1.01    259.2±0.45ms   175.9 MB/sec
list_struct_with_list/parquet_2                    1.00    275.5±0.50ms   165.5 MB/sec    1.00    276.6±0.39ms   164.9 MB/sec
list_struct_with_list/zstd                         1.00    280.3±0.52ms   162.6 MB/sec    1.00    281.1±0.43ms   162.2 MB/sec
list_struct_with_list/zstd_parquet_2               1.00    299.5±0.99ms   152.3 MB/sec    1.00    299.2±0.49ms   152.4 MB/sec
primitive/bloom_filter                             1.00    146.9±0.68ms   305.5 MB/sec    1.02    149.8±0.47ms   299.5 MB/sec
primitive/cdc                                      1.00    156.2±0.43ms   287.2 MB/sec    1.02    158.8±0.69ms   282.6 MB/sec
primitive/default                                  1.00    115.9±0.59ms   387.1 MB/sec    1.00    116.4±0.64ms   385.4 MB/sec
primitive/parquet_2                                1.00    130.7±0.49ms   343.3 MB/sec    1.00    131.4±0.19ms   341.6 MB/sec
primitive/zstd                                     1.00    145.8±1.18ms   307.8 MB/sec    1.00    146.1±0.53ms   307.1 MB/sec
primitive/zstd_parquet_2                           1.00    163.1±0.30ms   275.1 MB/sec    1.01    164.5±0.56ms   272.7 MB/sec
primitive_all_null/bloom_filter                    1.01    900.8±2.56µs    48.7 GB/sec    1.00    894.8±2.92µs    49.0 GB/sec
primitive_all_null/cdc                             1.00     18.8±0.27ms     2.3 GB/sec    1.00     18.8±0.33ms     2.3 GB/sec
primitive_all_null/default                         1.02    271.7±1.73µs   161.3 GB/sec    1.00    266.3±1.25µs   164.6 GB/sec
primitive_all_null/parquet_2                       1.00    272.1±1.59µs   161.1 GB/sec    1.01    275.1±1.07µs   159.3 GB/sec
primitive_all_null/zstd                            1.01    419.2±1.39µs   104.5 GB/sec    1.00    415.5±1.98µs   105.5 GB/sec
primitive_all_null/zstd_parquet_2                  1.00    369.1±1.26µs   118.7 GB/sec    1.01    371.8±1.33µs   117.9 GB/sec
primitive_non_null/bloom_filter                    1.00    104.8±0.32ms   419.8 MB/sec    1.04    108.8±0.28ms   404.5 MB/sec
primitive_non_null/cdc                             1.00     88.1±0.25ms   499.4 MB/sec    1.01     89.2±0.33ms   493.5 MB/sec
primitive_non_null/default                         1.00     65.7±0.13ms   670.2 MB/sec    1.01     66.5±0.20ms   661.6 MB/sec
primitive_non_null/parquet_2                       1.00     86.9±0.13ms   506.1 MB/sec    1.01     88.1±0.25ms   499.6 MB/sec
primitive_non_null/zstd                            1.00     95.9±0.20ms   458.6 MB/sec    1.01     97.3±0.33ms   452.4 MB/sec
primitive_non_null/zstd_parquet_2                  1.00    120.2±0.39ms   365.9 MB/sec    1.01    121.0±0.20ms   363.6 MB/sec
primitive_sparse_99pct_null/bloom_filter           1.00     12.1±0.10ms     3.6 GB/sec    1.00     12.1±0.04ms     3.6 GB/sec
primitive_sparse_99pct_null/cdc                    1.00     30.1±0.27ms  1488.5 MB/sec    1.06     31.9±0.63ms  1406.9 MB/sec
primitive_sparse_99pct_null/default                1.00     10.6±0.03ms     4.1 GB/sec    1.00     10.7±0.04ms     4.1 GB/sec
primitive_sparse_99pct_null/parquet_2              1.00     10.6±0.03ms     4.1 GB/sec    1.00     10.7±0.03ms     4.1 GB/sec
primitive_sparse_99pct_null/zstd                   1.00     14.1±0.06ms     3.1 GB/sec    1.00     14.1±0.07ms     3.1 GB/sec
primitive_sparse_99pct_null/zstd_parquet_2         1.00     12.6±0.04ms     3.5 GB/sec    1.01     12.7±0.06ms     3.4 GB/sec
short_string_non_null/bloom_filter                 1.00     27.1±0.06ms   442.8 MB/sec    1.07     28.9±0.09ms   415.2 MB/sec
short_string_non_null/cdc                          1.00     19.4±0.06ms   619.3 MB/sec    1.01     19.6±0.08ms   612.5 MB/sec
short_string_non_null/default                      1.00     15.3±0.08ms   786.1 MB/sec    1.01     15.4±0.04ms   778.6 MB/sec
short_string_non_null/parquet_2                    1.00     26.2±0.12ms   457.2 MB/sec    1.01     26.5±0.09ms   452.3 MB/sec
short_string_non_null/zstd                         1.00     35.5±0.09ms   338.4 MB/sec    1.01     35.8±0.10ms   335.3 MB/sec
short_string_non_null/zstd_parquet_2               1.00     29.3±0.14ms   410.2 MB/sec    1.01     29.4±0.11ms   407.7 MB/sec
string/bloom_filter                                1.00    196.9±7.92ms     2.6 GB/sec    1.20   235.6±26.76ms     2.2 GB/sec
string/cdc                                         1.02    207.0±7.00ms     2.5 GB/sec    1.00    203.9±1.18ms     2.5 GB/sec
string/default                                     1.00    104.6±3.66ms     4.9 GB/sec    1.11   116.5±17.01ms     4.4 GB/sec
string/parquet_2                                   1.17    115.1±0.63ms     4.4 GB/sec    1.00     98.5±0.74ms     5.2 GB/sec
string/zstd                                        1.12   468.0±13.69ms  1120.3 MB/sec    1.00    417.4±2.06ms  1255.9 MB/sec
string/zstd_parquet_2                              1.15    454.6±1.31ms  1153.2 MB/sec    1.00   395.1±13.17ms  1326.8 MB/sec
string_and_binary_view/bloom_filter                1.00     63.2±0.19ms   510.3 MB/sec    1.04     65.6±0.34ms   491.8 MB/sec
string_and_binary_view/cdc                         1.00     58.7±0.18ms   549.5 MB/sec    1.02     59.6±0.16ms   541.1 MB/sec
string_and_binary_view/default                     1.00     47.7±0.13ms   675.7 MB/sec    1.02     48.5±0.21ms   665.3 MB/sec
string_and_binary_view/parquet_2                   1.00     59.5±0.11ms   541.6 MB/sec    1.02     60.5±0.20ms   532.7 MB/sec
string_and_binary_view/zstd                        1.00     85.1±0.49ms   379.1 MB/sec    1.01     85.8±0.22ms   376.1 MB/sec
string_and_binary_view/zstd_parquet_2              1.01     75.1±1.81ms   429.5 MB/sec    1.00     74.4±0.24ms   433.3 MB/sec
string_dictionary/bloom_filter                     1.00     85.5±0.44ms     3.0 GB/sec    1.03     87.7±1.67ms     2.9 GB/sec
string_dictionary/cdc                              1.88     91.5±1.65ms     2.8 GB/sec    1.00     48.7±0.52ms     5.3 GB/sec
string_dictionary/default                          1.00     43.6±0.36ms     5.9 GB/sec    1.01     44.0±0.70ms     5.9 GB/sec
string_dictionary/parquet_2                        1.89     93.2±0.36ms     2.8 GB/sec    1.00     49.3±0.23ms     5.2 GB/sec
string_dictionary/zstd                             1.14   238.1±10.86ms  1109.3 MB/sec    1.00    208.5±1.70ms  1267.1 MB/sec
string_dictionary/zstd_parquet_2                   1.18    228.0±0.84ms  1158.4 MB/sec    1.00    193.4±0.23ms  1365.5 MB/sec
string_non_null/bloom_filter                       1.00   224.2±13.08ms     2.3 GB/sec    1.06    238.2±9.45ms     2.1 GB/sec
string_non_null/cdc                                1.05    254.2±6.47ms     2.0 GB/sec    1.00    241.9±0.89ms     2.1 GB/sec
string_non_null/default                            1.04   118.7±19.43ms     4.3 GB/sec    1.00    114.4±9.67ms     4.5 GB/sec
string_non_null/parquet_2                          1.02    131.0±8.91ms     3.9 GB/sec    1.00   128.5±10.77ms     4.0 GB/sec
string_non_null/zstd                               1.01    558.1±8.64ms   938.9 MB/sec    1.00    554.3±2.28ms   945.4 MB/sec
string_non_null/zstd_parquet_2                     1.01    504.1±9.84ms  1039.5 MB/sec    1.00    501.3±8.82ms  1045.2 MB/sec
string_ree/bloom_filter                            1.00    154.2±1.01ms   106.4 MB/sec    1.04    160.7±0.98ms   102.1 MB/sec
string_ree/cdc                                     1.00    194.4±4.02ms    84.4 MB/sec    1.19    232.1±1.89ms    70.7 MB/sec
string_ree/default                                 1.00    126.6±0.50ms   129.6 MB/sec    1.05    132.8±0.54ms   123.6 MB/sec
string_ree/parquet_2                               1.00    130.3±0.38ms   125.9 MB/sec    1.43    185.8±1.47ms    88.3 MB/sec
string_ree/zstd                                    1.00    136.5±2.70ms   120.2 MB/sec    1.42    193.5±0.65ms    84.8 MB/sec
string_ree/zstd_parquet_2                          1.00    144.3±0.34ms   113.7 MB/sec    1.40    201.7±0.41ms    81.3 MB/sec
string_ree_95pct_null/bloom_filter                 1.00     26.1±0.11ms    53.8 MB/sec    1.00     26.2±0.11ms    53.6 MB/sec
string_ree_95pct_null/cdc                          1.01     32.5±0.14ms    43.2 MB/sec    1.00     32.3±0.08ms    43.5 MB/sec
string_ree_95pct_null/default                      1.00     24.7±0.11ms    57.0 MB/sec    1.00     24.6±0.06ms    57.3 MB/sec
string_ree_95pct_null/parquet_2                    1.00     24.7±0.10ms    57.0 MB/sec    1.00     24.6±0.09ms    57.2 MB/sec
string_ree_95pct_null/zstd                         1.01     25.7±0.11ms    54.7 MB/sec    1.00     25.4±0.16ms    55.4 MB/sec
string_ree_95pct_null/zstd_parquet_2               1.01     25.4±0.09ms    55.3 MB/sec    1.00     25.3±0.06ms    55.6 MB/sec
struct_all_null/bloom_filter                       1.01    378.4±1.53µs    41.6 GB/sec    1.00    374.4±1.62µs    42.1 GB/sec
struct_all_null/cdc                                1.02      7.8±0.08ms     2.0 GB/sec    1.00      7.6±0.09ms     2.1 GB/sec
struct_all_null/default                            1.02    116.5±0.82µs   135.1 GB/sec    1.00    114.6±0.54µs   137.4 GB/sec
struct_all_null/parquet_2                          1.00    117.5±0.73µs   134.0 GB/sec    1.01    118.2±0.43µs   133.2 GB/sec
struct_all_null/zstd                               1.03    181.3±0.77µs    86.9 GB/sec    1.00    176.7±0.65µs    89.1 GB/sec
struct_all_null/zstd_parquet_2                     1.00    158.9±0.59µs    99.1 GB/sec    1.00    159.7±0.56µs    98.6 GB/sec
struct_non_null/bloom_filter                       1.00     46.0±0.18ms   347.7 MB/sec    1.02     46.8±0.17ms   341.5 MB/sec
struct_non_null/cdc                                1.00     45.2±0.19ms   353.6 MB/sec    1.01     45.5±0.17ms   351.3 MB/sec
struct_non_null/default                            1.00     31.7±0.12ms   504.8 MB/sec    1.01     32.0±0.11ms   499.9 MB/sec
struct_non_null/parquet_2                          1.00     40.4±0.11ms   396.4 MB/sec    1.01     40.6±0.10ms   394.2 MB/sec
struct_non_null/zstd                               1.00     40.3±0.10ms   397.1 MB/sec    1.01     40.5±0.08ms   394.8 MB/sec
struct_non_null/zstd_parquet_2                     1.00     54.2±0.17ms   295.2 MB/sec    1.00     54.2±0.11ms   295.1 MB/sec
struct_sparse_99pct_null/bloom_filter              1.00      6.5±0.04ms     2.4 GB/sec    1.00      6.5±0.02ms     2.4 GB/sec
struct_sparse_99pct_null/cdc                       1.00     13.9±0.08ms  1162.5 MB/sec    1.04     14.4±0.10ms  1118.6 MB/sec
struct_sparse_99pct_null/default                   1.00      5.9±0.02ms     2.7 GB/sec    1.00      6.0±0.01ms     2.6 GB/sec
struct_sparse_99pct_null/parquet_2                 1.00      5.9±0.02ms     2.7 GB/sec    1.01      6.0±0.01ms     2.6 GB/sec
struct_sparse_99pct_null/zstd                      1.00      7.3±0.01ms     2.2 GB/sec    1.00      7.3±0.03ms     2.1 GB/sec
struct_sparse_99pct_null/zstd_parquet_2            1.00      6.7±0.02ms     2.4 GB/sec    1.00      6.7±0.03ms     2.3 GB/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 2985.7s
Peak memory 2.9 GiB
Avg memory 2.6 GiB
CPU user 2877.4s
CPU sys 102.9s
Peak spill 0 B

branch

Metric Value
Wall time 3045.7s
Peak memory 2.8 GiB
Avg memory 2.6 GiB
CPU user 2900.4s
CPU sys 139.3s
Peak spill 0 B

File an issue against this benchmark runner

@MassivePizza

MassivePizza commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

That bench sure looks noisy. I'm not sure which benches actually use DeltaByteArray encoding, but parquet_2 should generally enable it for byte arrays (i.e. decimals and strings) AFAIK. I'll test again locally to make sure nothing is too broken.

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.

3 participants