Skip to content

perf(arrow-row): only encode referenced dictionary values - #11904

Open
princejain756 wants to merge 3 commits into
apache:mainfrom
princejain756:row-dictionary-compact
Open

princejain756 wants to merge 3 commits into
apache:mainfrom
princejain756:row-dictionary-compact

Conversation

@princejain756

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

RowConverter encodes every value in a dictionary's values array for each batch, so encoding cost grows with dictionary size rather than row count. The issue reports a 1M-value dictionary costing ~7ms to convert 8192 rows versus ~50us for the equivalent Utf8 array. The same dictionary-retention problem is tracked downstream in apache/datafusion#26696, where hash aggregate output slices keep the whole dictionary.

What changes are included in this PR?

  • When a dictionary column's values outnumber its rows, Codec::encoder gathers only the referenced values via MutableArrayData (no new dependencies) and stores a per-row remap in Encoder::Dictionary.
  • row_lengths and the encode path translate each key through the remap when present. encode_dictionary_values keeps its signature and handles the un-compacted path as before.
  • New benchmark case 4096 string_dictionary_sparse_keys(1M values): 4096 rows keyed into 1024 of 1M strings.

Are these changes tested?

New unit tests cover byte equality against an equivalent small dictionary, null keys, round-trip decoding, and sliced arrays. Benchmark results for the new case, this branch vs main:

  • convert_columns: 9.86ms -> 0.152ms (~65x)
  • convert_columns_prepared: 9.77ms -> 0.155ms (~63x)
  • append_rows: 9.61ms -> 0.150ms (~64x)
  • convert_rows: 51.0us -> 61.3us (decode path is unchanged)

Are there any significant user-facing changes?

No. Row encodings are unchanged; this only avoids encoding dictionary values that no row references.

RowConverter encoded every value in a dictionary's values array for each
batch, so a 1M-value dictionary cost ~10ms to convert 4096 rows even when
the rows referenced only a small subset of keys. When the values
outnumber the rows, gather just the referenced values with
MutableArrayData and remap each row's key onto the compacted encoding.

4096 rows keyed into 1M strings: 9.9ms -> 0.15ms (~65x).

Closes apache#11901.
@github-actions github-actions Bot added arrow-row arrow-row crate arrow-core Core crates related to representing arrow data enhancement New feature/addition labels Oct 25, 2026
princejain756 added a commit to princejain756/princejain756 that referenced this pull request Oct 25, 2026
@Rich-T-kid

Copy link
Copy Markdown
Contributor

run benchmark row_format

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: row_format

Sharding factor: 1 (1 workers).

Comparing row-dictionary-compact (5a1bb36) to 9a95c6d (merge-base) diff

Run configuration
run benchmark row_format
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: row_format

Comparing row-dictionary-compact (5a1bb36) to 9a95c6d (merge-base) diff

Run configuration
run benchmark row_format
shards: 1
Details
group                                                                                                                         base                                   changed
-----                                                                                                                         ----                                   -------
append_rows 10 large_list(0) of u64(0)                                                                                        1.00    569.8±1.60ns        ? ?/sec    1.02    578.9±2.30ns        ? ?/sec
append_rows 10 list(0) of u64(0)                                                                                              1.00    596.1±1.61ns        ? ?/sec    1.04    619.5±2.12ns        ? ?/sec
append_rows 4096 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)                 1.00    178.5±1.58µs        ? ?/sec    1.05    186.9±2.24µs        ? ?/sec
append_rows 4096 53 columns                                                                                                   1.00    824.8±1.04µs        ? ?/sec    1.00    824.2±1.31µs        ? ?/sec
append_rows 4096 bool(0, 0.5)                                                                                                 1.01      5.2±0.00µs        ? ?/sec    1.00      5.1±0.00µs        ? ?/sec
append_rows 4096 bool(0.3, 0.5)                                                                                               1.00      5.8±0.00µs        ? ?/sec    1.00      5.8±0.01µs        ? ?/sec
append_rows 4096 i64(0)                                                                                                       1.00      4.4±0.01µs        ? ?/sec    1.01      4.4±0.01µs        ? ?/sec
append_rows 4096 i64(0.3)                                                                                                     1.00      5.4±0.01µs        ? ?/sec    1.02      5.5±0.00µs        ? ?/sec
append_rows 4096 large_list(0) of u64(0)                                                                                      1.00     88.5±0.31µs        ? ?/sec    1.00     88.2±0.14µs        ? ?/sec
append_rows 4096 large_list(0) sliced to 10 of u64(0)                                                                         1.00    775.9±3.65ns        ? ?/sec    1.02    791.0±3.34ns        ? ?/sec
append_rows 4096 list(0) of u64(0)                                                                                            1.00     92.6±0.18µs        ? ?/sec    1.00     92.9±0.24µs        ? ?/sec
append_rows 4096 list(0) sliced to 10 of u64(0)                                                                               1.00    838.1±1.92ns        ? ?/sec    1.03    859.1±2.10ns        ? ?/sec
append_rows 4096 run_primitive(1024 physical)                                                                                 1.00     22.2±0.38µs        ? ?/sec    1.02     22.6±0.24µs        ? ?/sec
append_rows 4096 run_primitive(256 physical)                                                                                  1.00     12.3±0.02µs        ? ?/sec    1.00     12.3±0.02µs        ? ?/sec
append_rows 4096 run_primitive(512 physical)                                                                                  1.00     15.4±0.13µs        ? ?/sec    1.01     15.5±0.17µs        ? ?/sec
append_rows 4096 string view(1..100, 0)                                                                                       1.00     38.8±0.12µs        ? ?/sec    1.06     41.2±0.20µs        ? ?/sec
append_rows 4096 string view(1..100, 0.5)                                                                                     1.00     30.5±0.39µs        ? ?/sec    1.10     33.7±0.27µs        ? ?/sec
append_rows 4096 string view(10, 0)                                                                                           1.00     29.2±0.03µs        ? ?/sec    1.00     29.3±0.07µs        ? ?/sec
append_rows 4096 string view(100, 0)                                                                                          1.00     44.7±0.10µs        ? ?/sec    1.01     45.1±0.12µs        ? ?/sec
append_rows 4096 string view(100, 0.5)                                                                                        1.00     49.7±0.18µs        ? ?/sec    1.00     49.6±0.15µs        ? ?/sec
append_rows 4096 string view(30, 0)                                                                                           1.00     34.3±0.05µs        ? ?/sec    1.00     34.3±0.05µs        ? ?/sec
append_rows 4096 string(10, 0)                                                                                                1.01     26.6±0.03µs        ? ?/sec    1.00     26.5±0.03µs        ? ?/sec
append_rows 4096 string(100, 0)                                                                                               1.03     37.5±1.68µs        ? ?/sec    1.00     36.5±0.15µs        ? ?/sec
append_rows 4096 string(100, 0.5)                                                                                             1.01     34.0±0.29µs        ? ?/sec    1.00     33.6±0.35µs        ? ?/sec
append_rows 4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)                                                       1.00     94.5±1.57µs        ? ?/sec    1.00     94.7±1.58µs        ? ?/sec
append_rows 4096 string(30, 0)                                                                                                1.00     29.3±1.26µs        ? ?/sec    1.01     29.7±1.27µs        ? ?/sec
append_rows 4096 string_dictionary(10, 0)                                                                                     1.00     48.7±0.24µs        ? ?/sec    1.06     51.7±0.86µs        ? ?/sec
append_rows 4096 string_dictionary(100, 0)                                                                                    1.00     72.7±0.14µs        ? ?/sec    1.04     75.6±0.98µs        ? ?/sec
append_rows 4096 string_dictionary(100, 0.5)                                                                                  1.01     54.4±0.26µs        ? ?/sec    1.00     53.8±0.87µs        ? ?/sec
append_rows 4096 string_dictionary(30, 0)                                                                                     1.00     54.5±1.25µs        ? ?/sec    1.07     58.2±1.87µs        ? ?/sec
append_rows 4096 string_dictionary_low_cardinality(10, 0)                                                                     1.00     21.4±0.04µs        ? ?/sec    1.16     24.9±0.79µs        ? ?/sec
append_rows 4096 string_dictionary_low_cardinality(100, 0)                                                                    1.00     32.1±0.07µs        ? ?/sec    1.11     35.6±0.83µs        ? ?/sec
append_rows 4096 string_dictionary_low_cardinality(30, 0)                                                                     1.00     24.6±0.37µs        ? ?/sec    1.12     27.5±0.81µs        ? ?/sec
append_rows 4096 string_dictionary_sparse_keys(1M values)                                                                                                            1.00    131.4±0.55µs        ? ?/sec
append_rows 4096 u64(0)                                                                                                       1.00      4.1±0.00µs        ? ?/sec    1.01      4.2±0.01µs        ? ?/sec
append_rows 4096 u64(0.3)                                                                                                     1.00      5.3±0.01µs        ? ?/sec    1.02      5.4±0.00µs        ? ?/sec
append_rows 8192 53 columns                                                                                                   1.00   1714.1±2.83µs        ? ?/sec    1.00   1714.6±3.87µs        ? ?/sec
convert_columns 10 large_list(0) of u64(0)                                                                                    1.00    837.3±5.26ns        ? ?/sec    1.03    860.9±4.43ns        ? ?/sec
convert_columns 10 list(0) of u64(0)                                                                                          1.00    864.6±4.09ns        ? ?/sec    1.02    882.3±5.00ns        ? ?/sec
convert_columns 4096 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)             1.00    182.5±2.11µs        ? ?/sec    1.06    193.1±4.60µs        ? ?/sec
convert_columns 4096 53 columns                                                                                               1.00    830.1±1.39µs        ? ?/sec    1.00    828.4±1.40µs        ? ?/sec
convert_columns 4096 bool(0, 0.5)                                                                                             1.00      5.4±0.02µs        ? ?/sec    1.00      5.4±0.00µs        ? ?/sec
convert_columns 4096 bool(0.3, 0.5)                                                                                           1.00      6.0±0.01µs        ? ?/sec    1.02      6.1±0.01µs        ? ?/sec
convert_columns 4096 i64(0)                                                                                                   1.00      4.6±0.01µs        ? ?/sec    1.02      4.6±0.03µs        ? ?/sec
convert_columns 4096 i64(0.3)                                                                                                 1.00      5.6±0.01µs        ? ?/sec    1.02      5.7±0.00µs        ? ?/sec
convert_columns 4096 large_list(0) of u64(0)                                                                                  1.00     88.4±0.19µs        ? ?/sec    1.00     88.1±0.13µs        ? ?/sec
convert_columns 4096 large_list(0) sliced to 10 of u64(0)                                                                     1.00   1033.8±5.09ns        ? ?/sec    1.02   1055.9±5.16ns        ? ?/sec
convert_columns 4096 list(0) of u64(0)                                                                                        1.00     92.8±0.20µs        ? ?/sec    1.01     93.6±0.23µs        ? ?/sec
convert_columns 4096 list(0) sliced to 10 of u64(0)                                                                           1.00   1096.6±6.43ns        ? ?/sec    1.02   1123.9±5.02ns        ? ?/sec
convert_columns 4096 run_primitive(1024 physical)                                                                             1.00     22.5±0.37µs        ? ?/sec    1.00     22.6±0.39µs        ? ?/sec
convert_columns 4096 run_primitive(256 physical)                                                                              1.00     12.6±0.02µs        ? ?/sec    1.01     12.7±0.02µs        ? ?/sec
convert_columns 4096 run_primitive(512 physical)                                                                              1.00     15.8±0.13µs        ? ?/sec    1.01     15.9±0.15µs        ? ?/sec
convert_columns 4096 string view(1..100, 0)                                                                                   1.00     39.0±0.15µs        ? ?/sec    1.05     41.1±0.11µs        ? ?/sec
convert_columns 4096 string view(1..100, 0.5)                                                                                 1.00     30.8±0.53µs        ? ?/sec    1.09     33.6±0.36µs        ? ?/sec
convert_columns 4096 string view(10, 0)                                                                                       1.01     29.7±0.05µs        ? ?/sec    1.00     29.5±0.03µs        ? ?/sec
convert_columns 4096 string view(100, 0)                                                                                      1.00     45.0±0.16µs        ? ?/sec    1.02     45.8±0.11µs        ? ?/sec
convert_columns 4096 string view(100, 0.5)                                                                                    1.00     50.0±0.21µs        ? ?/sec    1.00     49.8±0.17µs        ? ?/sec
convert_columns 4096 string view(30, 0)                                                                                       1.00     34.4±0.06µs        ? ?/sec    1.00     34.5±0.08µs        ? ?/sec
convert_columns 4096 string(10, 0)                                                                                            1.00     26.6±0.03µs        ? ?/sec    1.00     26.7±0.03µs        ? ?/sec
convert_columns 4096 string(100, 0)                                                                                           1.00     36.8±0.21µs        ? ?/sec    1.01     37.3±0.14µs        ? ?/sec
convert_columns 4096 string(100, 0.5)                                                                                         1.01     33.6±0.41µs        ? ?/sec    1.00     33.3±0.34µs        ? ?/sec
convert_columns 4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)                                                   1.00     94.6±1.42µs        ? ?/sec    1.00     94.8±1.55µs        ? ?/sec
convert_columns 4096 string(30, 0)                                                                                            1.00     29.6±1.25µs        ? ?/sec    1.01     29.8±1.29µs        ? ?/sec
convert_columns 4096 string_dictionary(10, 0)                                                                                 1.00     49.7±0.09µs        ? ?/sec    1.10     54.4±4.12µs        ? ?/sec
convert_columns 4096 string_dictionary(100, 0)                                                                                1.00     74.5±0.37µs        ? ?/sec    1.07     79.6±4.31µs        ? ?/sec
convert_columns 4096 string_dictionary(100, 0.5)                                                                              1.00     55.8±0.23µs        ? ?/sec    1.00     56.1±3.96µs        ? ?/sec
convert_columns 4096 string_dictionary(30, 0)                                                                                 1.00     55.5±1.24µs        ? ?/sec    1.09     60.4±4.86µs        ? ?/sec
convert_columns 4096 string_dictionary_low_cardinality(10, 0)                                                                 1.00     22.5±0.03µs        ? ?/sec    1.22     27.5±3.95µs        ? ?/sec
convert_columns 4096 string_dictionary_low_cardinality(100, 0)                                                                1.00     33.0±0.04µs        ? ?/sec    1.15     38.0±4.03µs        ? ?/sec
convert_columns 4096 string_dictionary_low_cardinality(30, 0)                                                                 1.00     25.0±0.03µs        ? ?/sec    1.21     30.1±3.93µs        ? ?/sec
convert_columns 4096 string_dictionary_sparse_keys(1M values)                                                                                                        1.00    134.0±3.32µs        ? ?/sec
convert_columns 4096 u64(0)                                                                                                   1.15      5.1±0.41µs        ? ?/sec    1.00      4.4±0.13µs        ? ?/sec
convert_columns 4096 u64(0.3)                                                                                                 1.00      5.6±0.02µs        ? ?/sec    1.02      5.7±0.01µs        ? ?/sec
convert_columns 8192 53 columns                                                                                               1.00   1721.8±3.31µs        ? ?/sec    1.00   1719.4±3.72µs        ? ?/sec
convert_columns_prepared 10 large_list(0) of u64(0)                                                                           1.00    639.5±3.66ns        ? ?/sec    1.01    648.9±3.34ns        ? ?/sec
convert_columns_prepared 10 list(0) of u64(0)                                                                                 1.00    659.0±3.31ns        ? ?/sec    1.04    685.2±4.02ns        ? ?/sec
convert_columns_prepared 4096 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)    1.00    179.7±1.71µs        ? ?/sec    1.05    188.3±4.85µs        ? ?/sec
convert_columns_prepared 4096 53 columns                                                                                      1.00    827.5±1.81µs        ? ?/sec    1.00    825.9±1.38µs        ? ?/sec
convert_columns_prepared 4096 bool(0, 0.5)                                                                                    1.00      5.3±0.00µs        ? ?/sec    1.00      5.3±0.00µs        ? ?/sec
convert_columns_prepared 4096 bool(0.3, 0.5)                                                                                  1.00      5.9±0.00µs        ? ?/sec    1.01      5.9±0.00µs        ? ?/sec
convert_columns_prepared 4096 i64(0)                                                                                          1.00      5.6±0.00µs        ? ?/sec    1.00      5.6±0.00µs        ? ?/sec
convert_columns_prepared 4096 i64(0.3)                                                                                        1.00      5.5±0.01µs        ? ?/sec    1.01      5.6±0.00µs        ? ?/sec
convert_columns_prepared 4096 large_list(0) of u64(0)                                                                         1.01     88.0±0.46µs        ? ?/sec    1.00     87.2±0.13µs        ? ?/sec
convert_columns_prepared 4096 large_list(0) sliced to 10 of u64(0)                                                            1.00    835.2±2.55ns        ? ?/sec    1.02    855.0±4.85ns        ? ?/sec
convert_columns_prepared 4096 list(0) of u64(0)                                                                               1.00     92.6±0.19µs        ? ?/sec    1.01     93.2±0.16µs        ? ?/sec
convert_columns_prepared 4096 list(0) sliced to 10 of u64(0)                                                                  1.00    903.9±1.90ns        ? ?/sec    1.03    928.0±8.28ns        ? ?/sec
convert_columns_prepared 4096 run_primitive(1024 physical)                                                                    1.00     22.3±0.38µs        ? ?/sec    1.02     22.6±0.22µs        ? ?/sec
convert_columns_prepared 4096 run_primitive(256 physical)                                                                     1.00     12.3±0.02µs        ? ?/sec    1.00     12.3±0.02µs        ? ?/sec
convert_columns_prepared 4096 run_primitive(512 physical)                                                                     1.00     15.5±0.14µs        ? ?/sec    1.01     15.6±0.15µs        ? ?/sec
convert_columns_prepared 4096 string view(1..100, 0)                                                                          1.00     38.7±0.14µs        ? ?/sec    1.06     41.1±0.17µs        ? ?/sec
convert_columns_prepared 4096 string view(1..100, 0.5)                                                                        1.00     30.6±0.50µs        ? ?/sec    1.09     33.5±0.34µs        ? ?/sec
convert_columns_prepared 4096 string view(10, 0)                                                                              1.00     29.3±0.04µs        ? ?/sec    1.00     29.3±0.04µs        ? ?/sec
convert_columns_prepared 4096 string view(100, 0)                                                                             1.00     44.6±0.20µs        ? ?/sec    1.01     44.9±0.11µs        ? ?/sec
convert_columns_prepared 4096 string view(100, 0.5)                                                                           1.00     49.8±0.26µs        ? ?/sec    1.00     49.7±0.16µs        ? ?/sec
convert_columns_prepared 4096 string view(30, 0)                                                                              1.00     34.4±0.06µs        ? ?/sec    1.00     34.3±0.07µs        ? ?/sec
convert_columns_prepared 4096 string(10, 0)                                                                                   1.00     26.8±0.05µs        ? ?/sec    1.00     26.8±0.02µs        ? ?/sec
convert_columns_prepared 4096 string(100, 0)                                                                                  1.00     36.4±0.20µs        ? ?/sec    1.01     36.6±0.12µs        ? ?/sec
convert_columns_prepared 4096 string(100, 0.5)                                                                                1.01     33.6±0.32µs        ? ?/sec    1.00     33.2±0.42µs        ? ?/sec
convert_columns_prepared 4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)                                          1.00     94.0±1.66µs        ? ?/sec    1.01     94.8±1.66µs        ? ?/sec
convert_columns_prepared 4096 string(30, 0)                                                                                   1.00     29.4±1.26µs        ? ?/sec    1.00     29.5±1.28µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(10, 0)                                                                        1.00     48.4±0.05µs        ? ?/sec    1.11     53.6±4.03µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(100, 0)                                                                       1.00     73.5±0.31µs        ? ?/sec    1.06     77.6±4.25µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(100, 0.5)                                                                     1.00     54.4±0.19µs        ? ?/sec    1.02     55.3±3.83µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(30, 0)                                                                        1.00     54.5±1.25µs        ? ?/sec    1.11     60.2±4.95µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_low_cardinality(10, 0)                                                        1.00     21.5±0.03µs        ? ?/sec    1.24     26.7±3.90µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_low_cardinality(100, 0)                                                       1.00     32.2±0.03µs        ? ?/sec    1.17     37.7±3.97µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_low_cardinality(30, 0)                                                        1.00     24.0±0.02µs        ? ?/sec    1.22     29.2±3.93µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_sparse_keys(1M values)                                                                                               1.00    132.8±3.27µs        ? ?/sec
convert_columns_prepared 4096 u64(0)                                                                                          1.00      4.2±0.01µs        ? ?/sec    1.02      4.3±0.01µs        ? ?/sec
convert_columns_prepared 4096 u64(0.3)                                                                                        1.00      5.5±0.04µs        ? ?/sec    1.01      5.5±0.00µs        ? ?/sec
convert_columns_prepared 8192 53 columns                                                                                      1.00   1716.7±2.83µs        ? ?/sec    1.00   1714.4±2.97µs        ? ?/sec
convert_rows 10 large_list(0) of u64(0)                                                                                       1.00    914.8±4.55ns        ? ?/sec    1.00    914.8±3.96ns        ? ?/sec
convert_rows 10 list(0) of u64(0)                                                                                             1.00    973.5±5.01ns        ? ?/sec    1.00    970.1±5.38ns        ? ?/sec
convert_rows 4096 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)                1.02    176.1±0.52µs        ? ?/sec    1.00    172.1±0.41µs        ? ?/sec
convert_rows 4096 53 columns                                                                                                  1.03   1762.7±3.85µs        ? ?/sec    1.00   1712.9±3.29µs        ? ?/sec
convert_rows 4096 bool(0, 0.5)                                                                                                1.00     13.5±0.01µs        ? ?/sec    1.00     13.4±0.03µs        ? ?/sec
convert_rows 4096 bool(0.3, 0.5)                                                                                              1.00     13.5±0.01µs        ? ?/sec    1.00     13.4±0.01µs        ? ?/sec
convert_rows 4096 i64(0)                                                                                                      1.00     25.8±0.03µs        ? ?/sec    1.01     26.1±0.02µs        ? ?/sec
convert_rows 4096 i64(0.3)                                                                                                    1.00     25.8±0.02µs        ? ?/sec    1.01     26.1±0.02µs        ? ?/sec
convert_rows 4096 large_list(0) of u64(0)                                                                                     1.00    156.8±0.55µs        ? ?/sec    1.01    158.8±0.35µs        ? ?/sec
convert_rows 4096 large_list(0) sliced to 10 of u64(0)                                                                        1.00   1205.3±5.07ns        ? ?/sec    1.01   1220.2±6.22ns        ? ?/sec
convert_rows 4096 list(0) of u64(0)                                                                                           1.00    157.3±0.34µs        ? ?/sec    1.00    157.1±0.77µs        ? ?/sec
convert_rows 4096 list(0) sliced to 10 of u64(0)                                                                              1.01   1320.2±5.21ns        ? ?/sec    1.00   1312.8±5.82ns        ? ?/sec
convert_rows 4096 run_primitive(1024 physical)                                                                                1.00     76.2±0.07µs        ? ?/sec    1.00     76.3±0.13µs        ? ?/sec
convert_rows 4096 run_primitive(256 physical)                                                                                 1.00     53.9±0.06µs        ? ?/sec    1.00     53.7±0.10µs        ? ?/sec
convert_rows 4096 run_primitive(512 physical)                                                                                 1.00     61.8±0.07µs        ? ?/sec    1.00     61.8±0.12µs        ? ?/sec
convert_rows 4096 string view(1..100, 0)                                                                                      1.33     74.5±0.31µs        ? ?/sec    1.00     55.9±0.12µs        ? ?/sec
convert_rows 4096 string view(1..100, 0.5)                                                                                    1.69     63.9±0.41µs        ? ?/sec    1.00     37.8±0.04µs        ? ?/sec
convert_rows 4096 string view(10, 0)                                                                                          1.01     43.5±0.25µs        ? ?/sec    1.00     43.0±0.62µs        ? ?/sec
convert_rows 4096 string view(100, 0)                                                                                         1.00     70.3±0.11µs        ? ?/sec    1.01     70.7±0.16µs        ? ?/sec
convert_rows 4096 string view(100, 0.5)                                                                                       1.17     54.6±0.18µs        ? ?/sec    1.00     46.6±0.16µs        ? ?/sec
convert_rows 4096 string view(30, 0)                                                                                          1.00     49.5±0.05µs        ? ?/sec    1.00     49.5±0.04µs        ? ?/sec
convert_rows 4096 string(10, 0)                                                                                               1.05     37.3±0.56µs        ? ?/sec    1.00     35.4±0.03µs        ? ?/sec
convert_rows 4096 string(100, 0)                                                                                              1.00     63.5±0.08µs        ? ?/sec    1.00     63.7±0.24µs        ? ?/sec
convert_rows 4096 string(100, 0.5)                                                                                            1.14     49.8±0.16µs        ? ?/sec    1.00     43.8±0.08µs        ? ?/sec
convert_rows 4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)                                                      1.01    175.0±0.38µs        ? ?/sec    1.00    173.9±0.51µs        ? ?/sec
convert_rows 4096 string(30, 0)                                                                                               1.02     44.8±0.60µs        ? ?/sec    1.00     43.8±0.03µs        ? ?/sec
convert_rows 4096 string_dictionary(10, 0)                                                                                    1.04     37.1±0.56µs        ? ?/sec    1.00     35.7±0.03µs        ? ?/sec
convert_rows 4096 string_dictionary(100, 0)                                                                                   1.01     63.8±0.23µs        ? ?/sec    1.00     63.4±0.09µs        ? ?/sec
convert_rows 4096 string_dictionary(100, 0.5)                                                                                 1.14     49.8±0.13µs        ? ?/sec    1.00     43.7±0.07µs        ? ?/sec
convert_rows 4096 string_dictionary(30, 0)                                                                                    1.04     45.5±0.05µs        ? ?/sec    1.00     43.8±0.02µs        ? ?/sec
convert_rows 4096 string_dictionary_low_cardinality(10, 0)                                                                    1.01     36.6±0.04µs        ? ?/sec    1.00     36.4±0.20µs        ? ?/sec
convert_rows 4096 string_dictionary_low_cardinality(100, 0)                                                                   1.01     63.5±0.24µs        ? ?/sec    1.00     62.9±0.08µs        ? ?/sec
convert_rows 4096 string_dictionary_low_cardinality(30, 0)                                                                    1.01     44.2±0.03µs        ? ?/sec    1.00     44.0±0.04µs        ? ?/sec
convert_rows 4096 string_dictionary_sparse_keys(1M values)                                                                                                           1.00     35.5±0.03µs        ? ?/sec
convert_rows 4096 u64(0)                                                                                                      1.00     25.8±0.01µs        ? ?/sec    1.00     25.8±0.02µs        ? ?/sec
convert_rows 4096 u64(0.3)                                                                                                    1.00     25.6±0.02µs        ? ?/sec    1.01     25.8±0.01µs        ? ?/sec
convert_rows 8192 53 columns                                                                                                  1.02      4.3±0.06ms        ? ?/sec    1.00      4.2±0.06ms        ? ?/sec
convert_rows_parsed 4096 string view(1..100, 0)                                                                               1.00     56.8±0.15µs        ? ?/sec    1.31     74.6±0.58µs        ? ?/sec
convert_rows_parsed 4096 string view(1..100, 0.5)                                                                             1.00     36.3±0.17µs        ? ?/sec    1.70     61.8±0.32µs        ? ?/sec
convert_rows_parsed 4096 string view(10, 0)                                                                                   1.02     44.0±0.06µs        ? ?/sec    1.00     43.1±0.04µs        ? ?/sec
convert_rows_parsed 4096 string view(100, 0)                                                                                  1.00     76.5±0.11µs        ? ?/sec    1.00     76.5±0.13µs        ? ?/sec
convert_rows_parsed 4096 string view(100, 0.5)                                                                                1.00     50.2±0.27µs        ? ?/sec    1.11     55.8±0.36µs        ? ?/sec
convert_rows_parsed 4096 string view(30, 0)                                                                                   1.02     46.0±0.03µs        ? ?/sec    1.00     45.3±0.04µs        ? ?/sec
convert_rows_parsed 4096 string(10, 0)                                                                                        1.00     35.2±0.03µs        ? ?/sec    1.07     37.5±1.17µs        ? ?/sec
convert_rows_parsed 4096 string(100, 0)                                                                                       1.00     77.8±0.12µs        ? ?/sec    1.05     81.8±0.31µs        ? ?/sec
convert_rows_parsed 4096 string(100, 0.5)                                                                                     1.15     56.0±0.24µs        ? ?/sec    1.00     48.7±0.32µs        ? ?/sec
convert_rows_parsed 4096 string(30, 0)                                                                                        1.00     45.3±0.04µs        ? ?/sec    1.00     45.4±1.24µs        ? ?/sec
iterate rows                                                                                                                  1.00      2.0±0.00µs        ? ?/sec    1.04      2.1±0.01µs        ? ?/sec

Per-runner information
row_format — shard 1/1

Node: gk3-benchmark-cluster-nap-1shwrix6-6292f611-qz7v

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

uname:

Linux bench-c6403586814-3850-prxbt 6.12.105+ #1 SMP Sat Sep  5 07:54:11 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench row_format
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
Resource Usage

base (merge-base)

Metric Value
Wall time 1525.3s
Peak memory 24.6 MiB
Avg memory 16.4 MiB
CPU user 1521.5s
CPU sys 0.1s
Peak spill 0 B

branch

Metric Value
Wall time 1565.3s
Peak memory 38.3 MiB
Avg memory 21.6 MiB
CPU user 1561.8s
CPU sys 0.1s
Peak spill 0 B

File an issue against this benchmark runner

Checking remap.as_ref() inside the per-row map closure in row_lengths added a branch on every row even when remap was None, showing up on the un-compacted string_dictionary_low_cardinality benchmark in GKE. Match on remap.as_deref() once per column in row_lengths (matching encode_column) and zip remap in encode_dictionary_remapped.
@princejain756

Copy link
Copy Markdown
Contributor Author

In 5132371 I hoisted match remap.as_deref() out of the per-row closure in row_lengths (matching encode_column). Previously remap.as_ref() was checked on every row inside row_lengths, which showed up on the un-compacted string_dictionary_low_cardinality benchmark in the GKE run (21.4us -> 24.9us); with the check hoisted outside the loop, the None branch is identical to main.

@Rich-T-kid Rich-T-kid left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

this is causing regressions.

convert_columns_prepared 4096 string_dictionary(10, 0)                                                                        1.00     48.4±0.05µs        ? ?/sec    1.11     53.6±4.03µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(100, 0)                                                                       1.00     73.5±0.31µs        ? ?/sec    1.06     77.6±4.25µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(100, 0.5)                                                                     1.00     54.4±0.19µs        ? ?/sec    1.02     55.3±3.83µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(30, 0)                                                                        1.00     54.5±1.25µs        ? ?/sec    1.11     60.2±4.95µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_low_cardinality(10, 0)                                                        1.00     21.5±0.03µs        ? ?/sec    1.24     26.7±3.90µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_low_cardinality(100, 0)                                                       1.00     32.2±0.03µs        ? ?/sec    1.17     37.7±3.97µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_low_cardinality(30, 0)                                                        1.00     24.0±0.02µs        ? ?/sec    1.22     29.2±3.93µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_sparse_keys(1M values)                                                                                               1.00    132.8±3.27µs        ? ?/sec

is that expected?

@princejain756

Copy link
Copy Markdown
Contributor Author

@Rich-T-kid That GKE benchmark ran against 5a1bb36 (before 5132371).

In 5a1bb36, row_lengths evaluated remap.as_ref().map_or_else(|| k.as_usize(), |r| r[idx]) inside the per-row closure across all 4096 rows, which added a fixed ~4 to 5us overhead even when values.len() <= dictionary.len() (remap = None, which is the path taken by string_dictionary and string_dictionary_low_cardinality).

In 5132371, I hoisted match remap.as_deref() outside the loop in row_lengths (matching encode_column), so when values.len() <= dictionary.len(), the None branch executes the exact same loop as main. Could you re-trigger run benchmark row_format against 5132371?

@Rich-T-kid

Copy link
Copy Markdown
Contributor

going to merge into main so we have the correct baseline

@Rich-T-kid

Copy link
Copy Markdown
Contributor

run benchmark row_format

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: row_format

Sharding factor: 1 (1 workers).

Comparing row-dictionary-compact (1c9492a) to 68cd02d (merge-base) diff

Run configuration
run benchmark row_format
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@Rich-T-kid

Copy link
Copy Markdown
Contributor

run benchmark row_format

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: row_format

Sharding factor: 1 (1 workers).

Comparing row-dictionary-compact (1c9492a) to 68cd02d (merge-base) diff

Run configuration
run benchmark row_format
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: row_format

Comparing row-dictionary-compact (1c9492a) to 68cd02d (merge-base) diff

Run configuration
run benchmark row_format
shards: 1
Details
group                                                                                                                         base                                   changed
-----                                                                                                                         ----                                   -------
append_rows 10 large_list(0) of u64(0)                                                                                        1.00    568.9±3.48ns        ? ?/sec    1.02    580.5±1.63ns        ? ?/sec
append_rows 10 list(0) of u64(0)                                                                                              1.00    597.1±3.91ns        ? ?/sec    1.03    614.7±1.92ns        ? ?/sec
append_rows 4096 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)                 1.02    179.3±1.41µs        ? ?/sec    1.00    175.8±1.45µs        ? ?/sec
append_rows 4096 53 columns                                                                                                   1.00    825.6±1.76µs        ? ?/sec    1.00    825.6±4.05µs        ? ?/sec
append_rows 4096 bool(0, 0.5)                                                                                                 1.00      5.1±0.01µs        ? ?/sec    1.01      5.2±0.02µs        ? ?/sec
append_rows 4096 bool(0.3, 0.5)                                                                                               1.00      5.8±0.01µs        ? ?/sec    1.01      5.9±0.00µs        ? ?/sec
append_rows 4096 i64(0)                                                                                                       1.00      4.4±0.01µs        ? ?/sec    1.01      4.4±0.01µs        ? ?/sec
append_rows 4096 i64(0.3)                                                                                                     1.00      5.4±0.01µs        ? ?/sec    1.08      5.8±0.02µs        ? ?/sec
append_rows 4096 large_list(0) of u64(0)                                                                                      1.01     88.4±0.22µs        ? ?/sec    1.00     87.4±0.13µs        ? ?/sec
append_rows 4096 large_list(0) sliced to 10 of u64(0)                                                                         1.00    768.1±4.14ns        ? ?/sec    1.02    787.3±2.02ns        ? ?/sec
append_rows 4096 list(0) of u64(0)                                                                                            1.00     92.2±0.31µs        ? ?/sec    1.01     93.5±0.18µs        ? ?/sec
append_rows 4096 list(0) sliced to 10 of u64(0)                                                                               1.00    834.2±4.46ns        ? ?/sec    1.03    858.2±3.25ns        ? ?/sec
append_rows 4096 run_primitive(1024 physical)                                                                                 1.01     22.7±0.21µs        ? ?/sec    1.00     22.5±0.22µs        ? ?/sec
append_rows 4096 run_primitive(256 physical)                                                                                  1.00     12.2±0.02µs        ? ?/sec    1.00     12.3±0.03µs        ? ?/sec
append_rows 4096 run_primitive(512 physical)                                                                                  1.01     15.6±0.16µs        ? ?/sec    1.00     15.4±0.15µs        ? ?/sec
append_rows 4096 string view(1..100, 0)                                                                                       1.00     39.2±0.15µs        ? ?/sec    1.06     41.4±0.20µs        ? ?/sec
append_rows 4096 string view(1..100, 0.5)                                                                                     1.00     30.5±0.48µs        ? ?/sec    1.09     33.2±0.24µs        ? ?/sec
append_rows 4096 string view(10, 0)                                                                                           1.01     29.4±0.10µs        ? ?/sec    1.00     29.2±0.05µs        ? ?/sec
append_rows 4096 string view(100, 0)                                                                                          1.00     44.5±0.12µs        ? ?/sec    1.01     45.0±0.10µs        ? ?/sec
append_rows 4096 string view(100, 0.5)                                                                                        1.00     49.5±0.17µs        ? ?/sec    1.00     49.5±0.12µs        ? ?/sec
append_rows 4096 string view(30, 0)                                                                                           1.00     34.3±0.09µs        ? ?/sec    1.00     34.4±0.06µs        ? ?/sec
append_rows 4096 string(10, 0)                                                                                                1.00     26.6±0.16µs        ? ?/sec    1.00     26.5±0.02µs        ? ?/sec
append_rows 4096 string(100, 0)                                                                                               1.00     36.2±0.22µs        ? ?/sec    1.00     36.4±0.13µs        ? ?/sec
append_rows 4096 string(100, 0.5)                                                                                             1.03     34.5±0.31µs        ? ?/sec    1.00     33.4±0.27µs        ? ?/sec
append_rows 4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)                                                       1.00     95.0±1.54µs        ? ?/sec    1.00     95.2±1.42µs        ? ?/sec
append_rows 4096 string(30, 0)                                                                                                1.00     29.4±1.27µs        ? ?/sec    1.00     29.4±1.27µs        ? ?/sec
append_rows 4096 string_dictionary(10, 0)                                                                                     1.00     48.4±0.08µs        ? ?/sec    1.00     48.3±0.12µs        ? ?/sec
append_rows 4096 string_dictionary(100, 0)                                                                                    1.00     71.3±0.16µs        ? ?/sec    1.01     71.7±0.17µs        ? ?/sec
append_rows 4096 string_dictionary(100, 0.5)                                                                                  1.02     53.0±0.22µs        ? ?/sec    1.00     51.9±0.28µs        ? ?/sec
append_rows 4096 string_dictionary(30, 0)                                                                                     1.00     54.4±1.28µs        ? ?/sec    1.00     54.5±1.32µs        ? ?/sec
append_rows 4096 string_dictionary_low_cardinality(10, 0)                                                                     1.02     22.1±0.25µs        ? ?/sec    1.00     21.6±0.07µs        ? ?/sec
append_rows 4096 string_dictionary_low_cardinality(100, 0)                                                                    1.00     31.9±0.05µs        ? ?/sec    1.00     32.0±0.09µs        ? ?/sec
append_rows 4096 string_dictionary_low_cardinality(30, 0)                                                                     1.00     24.1±0.11µs        ? ?/sec    1.02     24.5±0.58µs        ? ?/sec
append_rows 4096 string_dictionary_sparse_keys(1M values)                                                                                                            1.00    128.1±0.80µs        ? ?/sec
append_rows 4096 u64(0)                                                                                                       1.03      5.5±0.05µs        ? ?/sec    1.00      5.3±0.41µs        ? ?/sec
append_rows 4096 u64(0.3)                                                                                                     1.00      5.2±0.01µs        ? ?/sec    1.01      5.3±0.00µs        ? ?/sec
append_rows 8192 53 columns                                                                                                   1.00   1711.8±2.43µs        ? ?/sec    1.00   1718.3±8.46µs        ? ?/sec
convert_columns 10 large_list(0) of u64(0)                                                                                    1.00    839.3±3.68ns        ? ?/sec    1.02    856.4±4.56ns        ? ?/sec
convert_columns 10 list(0) of u64(0)                                                                                          1.00    856.5±5.53ns        ? ?/sec    1.02    876.6±5.87ns        ? ?/sec
convert_columns 4096 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)             1.02    184.2±1.49µs        ? ?/sec    1.00    179.8±1.73µs        ? ?/sec
convert_columns 4096 53 columns                                                                                               1.00    828.3±1.32µs        ? ?/sec    1.00    828.5±1.91µs        ? ?/sec
convert_columns 4096 bool(0, 0.5)                                                                                             1.00      5.4±0.01µs        ? ?/sec    1.00      5.4±0.00µs        ? ?/sec
convert_columns 4096 bool(0.3, 0.5)                                                                                           1.00      6.0±0.02µs        ? ?/sec    1.02      6.1±0.00µs        ? ?/sec
convert_columns 4096 i64(0)                                                                                                   1.00      4.6±0.01µs        ? ?/sec    1.00      4.6±0.01µs        ? ?/sec
convert_columns 4096 i64(0.3)                                                                                                 1.00      5.6±0.00µs        ? ?/sec    1.07      6.0±0.01µs        ? ?/sec
convert_columns 4096 large_list(0) of u64(0)                                                                                  1.01     89.2±0.36µs        ? ?/sec    1.00     88.0±0.11µs        ? ?/sec
convert_columns 4096 large_list(0) sliced to 10 of u64(0)                                                                     1.00   1030.4±5.63ns        ? ?/sec    1.02   1046.9±5.46ns        ? ?/sec
convert_columns 4096 list(0) of u64(0)                                                                                        1.00     92.7±0.23µs        ? ?/sec    1.02     94.2±0.15µs        ? ?/sec
convert_columns 4096 list(0) sliced to 10 of u64(0)                                                                           1.00   1101.5±4.30ns        ? ?/sec    1.02   1122.4±5.12ns        ? ?/sec
convert_columns 4096 run_primitive(1024 physical)                                                                             1.00     22.7±0.42µs        ? ?/sec    1.01     22.9±0.25µs        ? ?/sec
convert_columns 4096 run_primitive(256 physical)                                                                              1.00     12.6±0.02µs        ? ?/sec    1.00     12.6±0.02µs        ? ?/sec
convert_columns 4096 run_primitive(512 physical)                                                                              1.01     16.0±0.18µs        ? ?/sec    1.00     15.8±0.14µs        ? ?/sec
convert_columns 4096 string view(1..100, 0)                                                                                   1.00     39.1±0.22µs        ? ?/sec    1.06     41.3±0.12µs        ? ?/sec
convert_columns 4096 string view(1..100, 0.5)                                                                                 1.00     30.7±0.54µs        ? ?/sec    1.09     33.4±0.31µs        ? ?/sec
convert_columns 4096 string view(10, 0)                                                                                       1.01     29.5±0.03µs        ? ?/sec    1.00     29.3±0.07µs        ? ?/sec
convert_columns 4096 string view(100, 0)                                                                                      1.00     44.3±0.14µs        ? ?/sec    1.02     45.4±0.14µs        ? ?/sec
convert_columns 4096 string view(100, 0.5)                                                                                    1.00     49.8±0.19µs        ? ?/sec    1.00     49.7±0.16µs        ? ?/sec
convert_columns 4096 string view(30, 0)                                                                                       1.00     34.4±0.05µs        ? ?/sec    1.01     34.6±0.05µs        ? ?/sec
convert_columns 4096 string(10, 0)                                                                                            1.00     26.7±0.09µs        ? ?/sec    1.00     26.6±0.02µs        ? ?/sec
convert_columns 4096 string(100, 0)                                                                                           1.00     36.4±0.16µs        ? ?/sec    1.02     37.3±0.15µs        ? ?/sec
convert_columns 4096 string(100, 0.5)                                                                                         1.03     34.2±0.30µs        ? ?/sec    1.00     33.1±0.42µs        ? ?/sec
convert_columns 4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)                                                   1.00     94.9±1.57µs        ? ?/sec    1.01     95.5±1.63µs        ? ?/sec
convert_columns 4096 string(30, 0)                                                                                            1.00     30.0±1.28µs        ? ?/sec    1.00     29.9±1.26µs        ? ?/sec
convert_columns 4096 string_dictionary(10, 0)                                                                                 1.00     49.6±0.42µs        ? ?/sec    1.00     49.4±0.05µs        ? ?/sec
convert_columns 4096 string_dictionary(100, 0)                                                                                1.00     72.7±0.15µs        ? ?/sec    1.02     73.8±0.27µs        ? ?/sec
convert_columns 4096 string_dictionary(100, 0.5)                                                                              1.02     54.9±0.25µs        ? ?/sec    1.00     53.8±0.38µs        ? ?/sec
convert_columns 4096 string_dictionary(30, 0)                                                                                 1.00     55.3±1.30µs        ? ?/sec    1.00     55.4±1.30µs        ? ?/sec
convert_columns 4096 string_dictionary_low_cardinality(10, 0)                                                                 1.00     22.6±0.27µs        ? ?/sec    1.01     22.8±0.26µs        ? ?/sec
convert_columns 4096 string_dictionary_low_cardinality(100, 0)                                                                1.00     32.9±0.04µs        ? ?/sec    1.00     33.1±0.06µs        ? ?/sec
convert_columns 4096 string_dictionary_low_cardinality(30, 0)                                                                 1.00     25.0±0.02µs        ? ?/sec    1.01     25.2±0.07µs        ? ?/sec
convert_columns 4096 string_dictionary_sparse_keys(1M values)                                                                                                        1.00    129.6±0.91µs        ? ?/sec
convert_columns 4096 u64(0)                                                                                                   1.00      4.3±0.02µs        ? ?/sec    1.04      4.5±0.01µs        ? ?/sec
convert_columns 4096 u64(0.3)                                                                                                 1.00      5.5±0.01µs        ? ?/sec    1.01      5.5±0.01µs        ? ?/sec
convert_columns 8192 53 columns                                                                                               1.00   1714.4±2.37µs        ? ?/sec    1.00  1715.5±12.75µs        ? ?/sec
convert_columns_prepared 10 large_list(0) of u64(0)                                                                           1.00    630.5±1.51ns        ? ?/sec    1.03    651.1±4.08ns        ? ?/sec
convert_columns_prepared 10 list(0) of u64(0)                                                                                 1.00    657.3±4.63ns        ? ?/sec    1.03    677.2±3.40ns        ? ?/sec
convert_columns_prepared 4096 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)    1.02    180.0±1.36µs        ? ?/sec    1.00    176.8±1.53µs        ? ?/sec
convert_columns_prepared 4096 53 columns                                                                                      1.00    826.3±1.11µs        ? ?/sec    1.00    826.7±2.85µs        ? ?/sec
convert_columns_prepared 4096 bool(0, 0.5)                                                                                    1.00      5.3±0.01µs        ? ?/sec    1.00      5.3±0.00µs        ? ?/sec
convert_columns_prepared 4096 bool(0.3, 0.5)                                                                                  1.00      5.9±0.02µs        ? ?/sec    1.01      6.0±0.00µs        ? ?/sec
convert_columns_prepared 4096 i64(0)                                                                                          1.00      4.9±0.50µs        ? ?/sec    1.12      5.5±0.29µs        ? ?/sec
convert_columns_prepared 4096 i64(0.3)                                                                                        1.00      5.5±0.01µs        ? ?/sec    1.07      5.9±0.00µs        ? ?/sec
convert_columns_prepared 4096 large_list(0) of u64(0)                                                                         1.02     88.9±0.18µs        ? ?/sec    1.00     87.5±0.22µs        ? ?/sec
convert_columns_prepared 4096 large_list(0) sliced to 10 of u64(0)                                                            1.00    836.1±3.99ns        ? ?/sec    1.02    850.9±3.69ns        ? ?/sec
convert_columns_prepared 4096 list(0) of u64(0)                                                                               1.00     92.3±0.23µs        ? ?/sec    1.02     93.8±0.25µs        ? ?/sec
convert_columns_prepared 4096 list(0) sliced to 10 of u64(0)                                                                  1.00    900.2±2.48ns        ? ?/sec    1.02    921.7±3.52ns        ? ?/sec
convert_columns_prepared 4096 run_primitive(1024 physical)                                                                    1.00     22.4±0.40µs        ? ?/sec    1.00     22.3±0.39µs        ? ?/sec
convert_columns_prepared 4096 run_primitive(256 physical)                                                                     1.00     12.3±0.03µs        ? ?/sec    1.00     12.4±0.08µs        ? ?/sec
convert_columns_prepared 4096 run_primitive(512 physical)                                                                     1.01     15.6±0.16µs        ? ?/sec    1.00     15.5±0.14µs        ? ?/sec
convert_columns_prepared 4096 string view(1..100, 0)                                                                          1.00     39.0±0.13µs        ? ?/sec    1.05     41.1±0.14µs        ? ?/sec
convert_columns_prepared 4096 string view(1..100, 0.5)                                                                        1.00     30.5±0.38µs        ? ?/sec    1.10     33.4±0.33µs        ? ?/sec
convert_columns_prepared 4096 string view(10, 0)                                                                              1.00     29.3±0.03µs        ? ?/sec    1.00     29.3±0.07µs        ? ?/sec
convert_columns_prepared 4096 string view(100, 0)                                                                             1.00     44.2±0.11µs        ? ?/sec    1.01     44.6±0.09µs        ? ?/sec
convert_columns_prepared 4096 string view(100, 0.5)                                                                           1.01     49.8±0.18µs        ? ?/sec    1.00     49.6±0.14µs        ? ?/sec
convert_columns_prepared 4096 string view(30, 0)                                                                              1.00     34.3±0.07µs        ? ?/sec    1.00     34.3±0.05µs        ? ?/sec
convert_columns_prepared 4096 string(10, 0)                                                                                   1.00     26.6±0.10µs        ? ?/sec    1.00     26.8±0.02µs        ? ?/sec
convert_columns_prepared 4096 string(100, 0)                                                                                  1.00     36.3±0.16µs        ? ?/sec    1.00     36.4±0.15µs        ? ?/sec
convert_columns_prepared 4096 string(100, 0.5)                                                                                1.03     34.2±0.31µs        ? ?/sec    1.00     33.3±0.32µs        ? ?/sec
convert_columns_prepared 4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)                                          1.00     94.7±1.62µs        ? ?/sec    1.01     95.6±1.55µs        ? ?/sec
convert_columns_prepared 4096 string(30, 0)                                                                                   1.00     29.5±1.25µs        ? ?/sec    1.01     29.7±1.28µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(10, 0)                                                                        1.00     48.4±0.15µs        ? ?/sec    1.00     48.3±0.04µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(100, 0)                                                                       1.00     71.4±0.19µs        ? ?/sec    1.02     72.8±0.25µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(100, 0.5)                                                                     1.03     53.8±0.19µs        ? ?/sec    1.00     52.4±0.28µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(30, 0)                                                                        1.00     54.5±1.28µs        ? ?/sec    1.00     54.4±1.32µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_low_cardinality(10, 0)                                                        1.00     21.5±0.07µs        ? ?/sec    1.01     21.7±0.06µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_low_cardinality(100, 0)                                                       1.00     32.0±0.03µs        ? ?/sec    1.01     32.2±0.14µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_low_cardinality(30, 0)                                                        1.00     24.0±0.03µs        ? ?/sec    1.01     24.2±0.07µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_sparse_keys(1M values)                                                                                               1.00    128.4±0.86µs        ? ?/sec
convert_columns_prepared 4096 u64(0)                                                                                          1.23      5.4±0.34µs        ? ?/sec    1.00      4.4±0.00µs        ? ?/sec
convert_columns_prepared 4096 u64(0.3)                                                                                        1.00      5.3±0.01µs        ? ?/sec    1.01      5.4±0.00µs        ? ?/sec
convert_columns_prepared 8192 53 columns                                                                                      1.00   1714.4±2.39µs        ? ?/sec    1.00   1708.4±2.51µs        ? ?/sec
convert_rows 10 large_list(0) of u64(0)                                                                                       1.02    925.9±3.80ns        ? ?/sec    1.00    909.2±3.26ns        ? ?/sec
convert_rows 10 list(0) of u64(0)                                                                                             1.01    967.0±3.90ns        ? ?/sec    1.00    960.2±2.38ns        ? ?/sec
convert_rows 4096 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)                1.02    174.9±0.25µs        ? ?/sec    1.00    171.4±0.57µs        ? ?/sec
convert_rows 4096 53 columns                                                                                                  1.02   1753.3±3.10µs        ? ?/sec    1.00   1718.7±6.79µs        ? ?/sec
convert_rows 4096 bool(0, 0.5)                                                                                                1.00     13.3±0.04µs        ? ?/sec    1.00     13.3±0.01µs        ? ?/sec
convert_rows 4096 bool(0.3, 0.5)                                                                                              1.00     13.3±0.05µs        ? ?/sec    1.01     13.4±0.07µs        ? ?/sec
convert_rows 4096 i64(0)                                                                                                      1.01     26.0±0.01µs        ? ?/sec    1.00     25.8±0.01µs        ? ?/sec
convert_rows 4096 i64(0.3)                                                                                                    1.00     26.0±0.08µs        ? ?/sec    1.00     25.9±0.02µs        ? ?/sec
convert_rows 4096 large_list(0) of u64(0)                                                                                     1.00    157.8±0.37µs        ? ?/sec    1.07    169.5±0.28µs        ? ?/sec
convert_rows 4096 large_list(0) sliced to 10 of u64(0)                                                                        1.00   1208.0±6.14ns        ? ?/sec    1.00   1204.2±3.61ns        ? ?/sec
convert_rows 4096 list(0) of u64(0)                                                                                           1.00    155.2±0.40µs        ? ?/sec    1.09    169.7±0.47µs        ? ?/sec
convert_rows 4096 list(0) sliced to 10 of u64(0)                                                                              1.01   1326.8±4.15ns        ? ?/sec    1.00   1315.0±4.41ns        ? ?/sec
convert_rows 4096 run_primitive(1024 physical)                                                                                1.00     76.3±0.08µs        ? ?/sec    1.01     76.9±0.21µs        ? ?/sec
convert_rows 4096 run_primitive(256 physical)                                                                                 1.00     53.9±0.07µs        ? ?/sec    1.00     54.0±0.09µs        ? ?/sec
convert_rows 4096 run_primitive(512 physical)                                                                                 1.00     61.9±0.08µs        ? ?/sec    1.00     62.0±0.11µs        ? ?/sec
convert_rows 4096 string view(1..100, 0)                                                                                      1.35     76.1±0.42µs        ? ?/sec    1.00     56.6±0.20µs        ? ?/sec
convert_rows 4096 string view(1..100, 0.5)                                                                                    1.69     66.1±0.37µs        ? ?/sec    1.00     39.0±0.06µs        ? ?/sec
convert_rows 4096 string view(10, 0)                                                                                          1.00     42.5±0.10µs        ? ?/sec    1.03     43.9±0.63µs        ? ?/sec
convert_rows 4096 string view(100, 0)                                                                                         1.00     70.2±0.41µs        ? ?/sec    1.01     71.0±0.22µs        ? ?/sec
convert_rows 4096 string view(100, 0.5)                                                                                       1.07     54.8±0.29µs        ? ?/sec    1.00     51.1±0.21µs        ? ?/sec
convert_rows 4096 string view(30, 0)                                                                                          1.00     49.9±0.05µs        ? ?/sec    1.00     49.8±0.03µs        ? ?/sec
convert_rows 4096 string(10, 0)                                                                                               1.00     35.5±0.09µs        ? ?/sec    1.00     35.5±0.03µs        ? ?/sec
convert_rows 4096 string(100, 0)                                                                                              1.01     63.3±0.12µs        ? ?/sec    1.00     62.5±0.09µs        ? ?/sec
convert_rows 4096 string(100, 0.5)                                                                                            1.13     49.6±0.16µs        ? ?/sec    1.00     44.0±0.19µs        ? ?/sec
convert_rows 4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)                                                      1.01    173.0±0.34µs        ? ?/sec    1.00    172.0±0.42µs        ? ?/sec
convert_rows 4096 string(30, 0)                                                                                               1.02     44.9±0.08µs        ? ?/sec    1.00     43.9±0.03µs        ? ?/sec
convert_rows 4096 string_dictionary(10, 0)                                                                                    1.00     35.7±0.02µs        ? ?/sec    1.00     35.8±0.09µs        ? ?/sec
convert_rows 4096 string_dictionary(100, 0)                                                                                   1.00     62.9±0.06µs        ? ?/sec    1.00     62.7±0.11µs        ? ?/sec
convert_rows 4096 string_dictionary(100, 0.5)                                                                                 1.13     49.5±0.17µs        ? ?/sec    1.00     43.9±0.07µs        ? ?/sec
convert_rows 4096 string_dictionary(30, 0)                                                                                    1.04     45.2±0.04µs        ? ?/sec    1.00     43.7±0.08µs        ? ?/sec
convert_rows 4096 string_dictionary_low_cardinality(10, 0)                                                                    1.00     36.7±0.13µs        ? ?/sec    1.01     36.9±0.28µs        ? ?/sec
convert_rows 4096 string_dictionary_low_cardinality(100, 0)                                                                   1.00     63.0±0.05µs        ? ?/sec    1.01     63.7±0.63µs        ? ?/sec
convert_rows 4096 string_dictionary_low_cardinality(30, 0)                                                                    1.00     43.9±0.03µs        ? ?/sec    1.00     43.8±0.10µs        ? ?/sec
convert_rows 4096 string_dictionary_sparse_keys(1M values)                                                                                                           1.00     35.6±0.02µs        ? ?/sec
convert_rows 4096 u64(0)                                                                                                      1.01     25.8±0.03µs        ? ?/sec    1.00     25.6±0.01µs        ? ?/sec
convert_rows 4096 u64(0.3)                                                                                                    1.01     25.8±0.06µs        ? ?/sec    1.00     25.6±0.07µs        ? ?/sec
convert_rows 8192 53 columns                                                                                                  1.00      4.1±0.01ms        ? ?/sec    1.01      4.1±0.02ms        ? ?/sec
convert_rows_parsed 4096 string view(1..100, 0)                                                                               1.00     55.5±0.09µs        ? ?/sec    1.34     74.3±0.48µs        ? ?/sec
convert_rows_parsed 4096 string view(1..100, 0.5)                                                                             1.00     35.3±0.06µs        ? ?/sec    1.75     61.8±0.30µs        ? ?/sec
convert_rows_parsed 4096 string view(10, 0)                                                                                   1.00     43.0±0.03µs        ? ?/sec    1.00     43.0±0.02µs        ? ?/sec
convert_rows_parsed 4096 string view(100, 0)                                                                                  1.00     75.1±0.14µs        ? ?/sec    1.02     76.3±0.11µs        ? ?/sec
convert_rows_parsed 4096 string view(100, 0.5)                                                                                1.00     47.2±0.15µs        ? ?/sec    1.22     57.4±0.20µs        ? ?/sec
convert_rows_parsed 4096 string view(30, 0)                                                                                   1.00     45.4±0.04µs        ? ?/sec    1.05     47.7±0.22µs        ? ?/sec
convert_rows_parsed 4096 string(10, 0)                                                                                        1.00     34.5±1.16µs        ? ?/sec    1.03     35.7±2.20µs        ? ?/sec
convert_rows_parsed 4096 string(100, 0)                                                                                       1.00     75.3±0.12µs        ? ?/sec    1.00     75.2±0.08µs        ? ?/sec
convert_rows_parsed 4096 string(100, 0.5)                                                                                     1.12     54.0±0.14µs        ? ?/sec    1.00     48.3±0.16µs        ? ?/sec
convert_rows_parsed 4096 string(30, 0)                                                                                        1.06     47.3±0.15µs        ? ?/sec    1.00     44.5±0.02µs        ? ?/sec
iterate rows                                                                                                                  1.00      2.0±0.00µs        ? ?/sec    1.00      2.0±0.01µs        ? ?/sec

Per-runner information
row_format — shard 1/1

Node: gk3-benchmark-cluster-nap-ptunuejs-f3ae936a-fl47

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

uname:

Linux bench-c6434013021-3917-jrqsv 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench row_format
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
Resource Usage

base (merge-base)

Metric Value
Wall time 1525.3s
Peak memory 28.5 MiB
Avg memory 17.7 MiB
CPU user 1519.5s
CPU sys 0.1s
Peak spill 0 B

branch

Metric Value
Wall time 1565.3s
Peak memory 38.8 MiB
Avg memory 21.6 MiB
CPU user 1562.7s
CPU sys 0.1s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: row_format

Comparing row-dictionary-compact (1c9492a) to 68cd02d (merge-base) diff

Run configuration
run benchmark row_format
shards: 1
Details
group                                                                                                                         base                                   changed
-----                                                                                                                         ----                                   -------
append_rows 10 large_list(0) of u64(0)                                                                                        1.00    565.4±2.05ns        ? ?/sec    1.04    585.6±2.46ns        ? ?/sec
append_rows 10 list(0) of u64(0)                                                                                              1.00    594.5±2.20ns        ? ?/sec    1.03    614.6±1.22ns        ? ?/sec
append_rows 4096 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)                 1.02    181.8±1.62µs        ? ?/sec    1.00    177.5±1.59µs        ? ?/sec
append_rows 4096 53 columns                                                                                                   1.01    832.7±1.56µs        ? ?/sec    1.00    827.3±1.67µs        ? ?/sec
append_rows 4096 bool(0, 0.5)                                                                                                 1.00      5.1±0.00µs        ? ?/sec    1.00      5.1±0.01µs        ? ?/sec
append_rows 4096 bool(0.3, 0.5)                                                                                               1.00      5.8±0.01µs        ? ?/sec    1.01      5.9±0.00µs        ? ?/sec
append_rows 4096 i64(0)                                                                                                       1.00      4.4±0.01µs        ? ?/sec    1.00      4.4±0.01µs        ? ?/sec
append_rows 4096 i64(0.3)                                                                                                     1.00      5.4±0.00µs        ? ?/sec    1.07      5.8±0.01µs        ? ?/sec
append_rows 4096 large_list(0) of u64(0)                                                                                      1.01     88.7±0.21µs        ? ?/sec    1.00     87.6±0.13µs        ? ?/sec
append_rows 4096 large_list(0) sliced to 10 of u64(0)                                                                         1.00    768.8±2.81ns        ? ?/sec    1.00    769.7±2.20ns        ? ?/sec
append_rows 4096 list(0) of u64(0)                                                                                            1.00     92.0±0.16µs        ? ?/sec    1.01     93.2±0.17µs        ? ?/sec
append_rows 4096 list(0) sliced to 10 of u64(0)                                                                               1.00    846.6±3.06ns        ? ?/sec    1.00    847.1±1.16ns        ? ?/sec
append_rows 4096 run_primitive(1024 physical)                                                                                 1.00     22.6±0.22µs        ? ?/sec    1.00     22.5±0.22µs        ? ?/sec
append_rows 4096 run_primitive(256 physical)                                                                                  1.00     12.2±0.02µs        ? ?/sec    1.00     12.3±0.03µs        ? ?/sec
append_rows 4096 run_primitive(512 physical)                                                                                  1.01     15.5±0.19µs        ? ?/sec    1.00     15.4±0.15µs        ? ?/sec
append_rows 4096 string view(1..100, 0)                                                                                       1.00     39.4±0.16µs        ? ?/sec    1.05     41.2±0.16µs        ? ?/sec
append_rows 4096 string view(1..100, 0.5)                                                                                     1.00     30.4±0.38µs        ? ?/sec    1.10     33.5±0.35µs        ? ?/sec
append_rows 4096 string view(10, 0)                                                                                           1.00     29.3±0.03µs        ? ?/sec    1.00     29.2±0.04µs        ? ?/sec
append_rows 4096 string view(100, 0)                                                                                          1.00     44.8±0.19µs        ? ?/sec    1.01     45.2±0.13µs        ? ?/sec
append_rows 4096 string view(100, 0.5)                                                                                        1.00     49.4±0.18µs        ? ?/sec    1.00     49.6±0.18µs        ? ?/sec
append_rows 4096 string view(30, 0)                                                                                           1.00     34.4±0.07µs        ? ?/sec    1.00     34.4±0.04µs        ? ?/sec
append_rows 4096 string(10, 0)                                                                                                1.00     26.4±0.03µs        ? ?/sec    1.00     26.5±0.02µs        ? ?/sec
append_rows 4096 string(100, 0)                                                                                               1.00     36.3±0.13µs        ? ?/sec    1.01     36.6±0.15µs        ? ?/sec
append_rows 4096 string(100, 0.5)                                                                                             1.04     34.7±0.37µs        ? ?/sec    1.00     33.5±0.35µs        ? ?/sec
append_rows 4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)                                                       1.07    101.4±1.42µs        ? ?/sec    1.00     95.2±1.71µs        ? ?/sec
append_rows 4096 string(30, 0)                                                                                                1.00     29.4±1.27µs        ? ?/sec    1.00     29.5±1.28µs        ? ?/sec
append_rows 4096 string_dictionary(10, 0)                                                                                     1.00     48.4±0.07µs        ? ?/sec    1.00     48.4±0.07µs        ? ?/sec
append_rows 4096 string_dictionary(100, 0)                                                                                    1.01     72.3±0.20µs        ? ?/sec    1.00     72.0±0.16µs        ? ?/sec
append_rows 4096 string_dictionary(100, 0.5)                                                                                  1.02     53.5±0.21µs        ? ?/sec    1.00     52.5±0.32µs        ? ?/sec
append_rows 4096 string_dictionary(30, 0)                                                                                     1.00     54.4±1.23µs        ? ?/sec    1.01     54.7±1.28µs        ? ?/sec
append_rows 4096 string_dictionary_low_cardinality(10, 0)                                                                     1.02     22.0±0.61µs        ? ?/sec    1.00     21.6±0.04µs        ? ?/sec
append_rows 4096 string_dictionary_low_cardinality(100, 0)                                                                    1.00     31.9±0.04µs        ? ?/sec    1.00     31.9±0.03µs        ? ?/sec
append_rows 4096 string_dictionary_low_cardinality(30, 0)                                                                     1.00     24.0±0.05µs        ? ?/sec    1.00     24.1±0.04µs        ? ?/sec
append_rows 4096 string_dictionary_sparse_keys(1M values)                                                                                                            1.00    127.8±0.55µs        ? ?/sec
append_rows 4096 u64(0)                                                                                                       1.00      4.1±0.01µs        ? ?/sec    1.04      4.3±0.01µs        ? ?/sec
append_rows 4096 u64(0.3)                                                                                                     1.00      5.2±0.01µs        ? ?/sec    1.01      5.3±0.01µs        ? ?/sec
append_rows 8192 53 columns                                                                                                   1.00   1730.7±4.70µs        ? ?/sec    1.01  1739.6±11.83µs        ? ?/sec
convert_columns 10 large_list(0) of u64(0)                                                                                    1.00    837.1±3.67ns        ? ?/sec    1.03    860.7±5.45ns        ? ?/sec
convert_columns 10 list(0) of u64(0)                                                                                          1.00    858.9±7.32ns        ? ?/sec    1.03    880.4±2.79ns        ? ?/sec
convert_columns 4096 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)             1.01    184.2±1.20µs        ? ?/sec    1.00    182.8±1.58µs        ? ?/sec
convert_columns 4096 53 columns                                                                                               1.01    836.3±3.57µs        ? ?/sec    1.00    830.7±2.06µs        ? ?/sec
convert_columns 4096 bool(0, 0.5)                                                                                             1.00      5.4±0.01µs        ? ?/sec    1.00      5.4±0.00µs        ? ?/sec
convert_columns 4096 bool(0.3, 0.5)                                                                                           1.00      6.0±0.00µs        ? ?/sec    1.02      6.2±0.00µs        ? ?/sec
convert_columns 4096 i64(0)                                                                                                   1.00      4.6±0.01µs        ? ?/sec    1.01      4.6±0.01µs        ? ?/sec
convert_columns 4096 i64(0.3)                                                                                                 1.00      5.6±0.01µs        ? ?/sec    1.07      6.1±0.03µs        ? ?/sec
convert_columns 4096 large_list(0) of u64(0)                                                                                  1.02     89.7±0.21µs        ? ?/sec    1.00     88.3±0.12µs        ? ?/sec
convert_columns 4096 large_list(0) sliced to 10 of u64(0)                                                                     1.00   1040.3±4.81ns        ? ?/sec    1.01   1048.2±3.69ns        ? ?/sec
convert_columns 4096 list(0) of u64(0)                                                                                        1.00     92.5±0.17µs        ? ?/sec    1.01     93.8±0.24µs        ? ?/sec
convert_columns 4096 list(0) sliced to 10 of u64(0)                                                                           1.00   1119.5±8.49ns        ? ?/sec    1.00   1124.5±3.68ns        ? ?/sec
convert_columns 4096 run_primitive(1024 physical)                                                                             1.00     22.7±0.38µs        ? ?/sec    1.00     22.7±0.31µs        ? ?/sec
convert_columns 4096 run_primitive(256 physical)                                                                              1.00     12.6±0.02µs        ? ?/sec    1.01     12.7±0.02µs        ? ?/sec
convert_columns 4096 run_primitive(512 physical)                                                                              1.01     15.9±0.16µs        ? ?/sec    1.00     15.8±0.15µs        ? ?/sec
convert_columns 4096 string view(1..100, 0)                                                                                   1.00     39.2±0.18µs        ? ?/sec    1.05     41.2±0.17µs        ? ?/sec
convert_columns 4096 string view(1..100, 0.5)                                                                                 1.00     30.8±0.44µs        ? ?/sec    1.10     33.7±0.32µs        ? ?/sec
convert_columns 4096 string view(10, 0)                                                                                       1.01     29.7±0.03µs        ? ?/sec    1.00     29.5±0.03µs        ? ?/sec
convert_columns 4096 string view(100, 0)                                                                                      1.00     44.7±0.12µs        ? ?/sec    1.01     45.3±0.11µs        ? ?/sec
convert_columns 4096 string view(100, 0.5)                                                                                    1.00     49.8±0.19µs        ? ?/sec    1.00     49.8±0.23µs        ? ?/sec
convert_columns 4096 string view(30, 0)                                                                                       1.00     34.5±0.06µs        ? ?/sec    1.00     34.6±0.04µs        ? ?/sec
convert_columns 4096 string(10, 0)                                                                                            1.00     26.7±0.03µs        ? ?/sec    1.00     26.7±0.02µs        ? ?/sec
convert_columns 4096 string(100, 0)                                                                                           1.01     37.3±0.12µs        ? ?/sec    1.00     36.8±0.12µs        ? ?/sec
convert_columns 4096 string(100, 0.5)                                                                                         1.04     35.1±0.20µs        ? ?/sec    1.00     33.6±0.27µs        ? ?/sec
convert_columns 4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)                                                   1.07    101.4±1.51µs        ? ?/sec    1.00     95.2±1.41µs        ? ?/sec
convert_columns 4096 string(30, 0)                                                                                            1.00     29.6±1.25µs        ? ?/sec    1.01     29.9±1.27µs        ? ?/sec
convert_columns 4096 string_dictionary(10, 0)                                                                                 1.00     49.6±0.06µs        ? ?/sec    1.00     49.6±0.04µs        ? ?/sec
convert_columns 4096 string_dictionary(100, 0)                                                                                1.00     73.3±0.27µs        ? ?/sec    1.00     73.4±0.15µs        ? ?/sec
convert_columns 4096 string_dictionary(100, 0.5)                                                                              1.02     54.7±0.23µs        ? ?/sec    1.00     53.6±0.34µs        ? ?/sec
convert_columns 4096 string_dictionary(30, 0)                                                                                 1.03     57.2±1.40µs        ? ?/sec    1.00     55.7±1.29µs        ? ?/sec
convert_columns 4096 string_dictionary_low_cardinality(10, 0)                                                                 1.00     22.4±0.04µs        ? ?/sec    1.01     22.6±0.03µs        ? ?/sec
convert_columns 4096 string_dictionary_low_cardinality(100, 0)                                                                1.00     33.2±0.30µs        ? ?/sec    1.00     33.0±0.03µs        ? ?/sec
convert_columns 4096 string_dictionary_low_cardinality(30, 0)                                                                 1.00     25.1±0.05µs        ? ?/sec    1.01     25.3±0.02µs        ? ?/sec
convert_columns 4096 string_dictionary_sparse_keys(1M values)                                                                                                        1.00    129.5±0.61µs        ? ?/sec
convert_columns 4096 u64(0)                                                                                                   1.00      4.3±0.01µs        ? ?/sec    1.04      4.5±0.01µs        ? ?/sec
convert_columns 4096 u64(0.3)                                                                                                 1.00      5.5±0.01µs        ? ?/sec    1.01      5.5±0.01µs        ? ?/sec
convert_columns 8192 53 columns                                                                                               1.00   1733.5±4.06µs        ? ?/sec    1.00   1734.4±7.21µs        ? ?/sec
convert_columns_prepared 10 large_list(0) of u64(0)                                                                           1.00    631.6±2.65ns        ? ?/sec    1.04    654.6±4.66ns        ? ?/sec
convert_columns_prepared 10 list(0) of u64(0)                                                                                 1.00    658.2±4.02ns        ? ?/sec    1.03    677.0±1.63ns        ? ?/sec
convert_columns_prepared 4096 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)    1.03    183.4±1.83µs        ? ?/sec    1.00    177.4±1.44µs        ? ?/sec
convert_columns_prepared 4096 53 columns                                                                                      1.01    838.4±5.55µs        ? ?/sec    1.00    827.0±2.37µs        ? ?/sec
convert_columns_prepared 4096 bool(0, 0.5)                                                                                    1.00      5.3±0.00µs        ? ?/sec    1.01      5.3±0.00µs        ? ?/sec
convert_columns_prepared 4096 bool(0.3, 0.5)                                                                                  1.00      5.9±0.00µs        ? ?/sec    1.01      6.0±0.00µs        ? ?/sec
convert_columns_prepared 4096 i64(0)                                                                                          1.00      4.4±0.00µs        ? ?/sec    1.00      4.5±0.00µs        ? ?/sec
convert_columns_prepared 4096 i64(0.3)                                                                                        1.00      5.5±0.00µs        ? ?/sec    1.08      5.9±0.03µs        ? ?/sec
convert_columns_prepared 4096 large_list(0) of u64(0)                                                                         1.01     88.9±0.23µs        ? ?/sec    1.00     87.8±0.16µs        ? ?/sec
convert_columns_prepared 4096 large_list(0) sliced to 10 of u64(0)                                                            1.00    831.9±3.85ns        ? ?/sec    1.01    843.9±2.35ns        ? ?/sec
convert_columns_prepared 4096 list(0) of u64(0)                                                                               1.00     92.3±0.18µs        ? ?/sec    1.01     93.5±0.18µs        ? ?/sec
convert_columns_prepared 4096 list(0) sliced to 10 of u64(0)                                                                  1.00    912.8±3.49ns        ? ?/sec    1.01    917.7±2.36ns        ? ?/sec
convert_columns_prepared 4096 run_primitive(1024 physical)                                                                    1.00     22.4±0.40µs        ? ?/sec    1.00     22.4±0.38µs        ? ?/sec
convert_columns_prepared 4096 run_primitive(256 physical)                                                                     1.00     12.3±0.02µs        ? ?/sec    1.00     12.4±0.02µs        ? ?/sec
convert_columns_prepared 4096 run_primitive(512 physical)                                                                     1.01     15.7±0.16µs        ? ?/sec    1.00     15.5±0.14µs        ? ?/sec
convert_columns_prepared 4096 string view(1..100, 0)                                                                          1.00     38.8±0.12µs        ? ?/sec    1.07     41.4±0.14µs        ? ?/sec
convert_columns_prepared 4096 string view(1..100, 0.5)                                                                        1.00     30.7±0.48µs        ? ?/sec    1.09     33.6±0.29µs        ? ?/sec
convert_columns_prepared 4096 string view(10, 0)                                                                              1.00     29.3±0.03µs        ? ?/sec    1.00     29.4±0.08µs        ? ?/sec
convert_columns_prepared 4096 string view(100, 0)                                                                             1.00     44.7±0.14µs        ? ?/sec    1.01     45.0±0.13µs        ? ?/sec
convert_columns_prepared 4096 string view(100, 0.5)                                                                           1.00     49.6±0.20µs        ? ?/sec    1.00     49.7±0.21µs        ? ?/sec
convert_columns_prepared 4096 string view(30, 0)                                                                              1.00     34.3±0.04µs        ? ?/sec    1.00     34.5±0.07µs        ? ?/sec
convert_columns_prepared 4096 string(10, 0)                                                                                   1.01     26.8±0.03µs        ? ?/sec    1.00     26.6±0.03µs        ? ?/sec
convert_columns_prepared 4096 string(100, 0)                                                                                  1.01     37.2±0.14µs        ? ?/sec    1.00     36.6±0.13µs        ? ?/sec
convert_columns_prepared 4096 string(100, 0.5)                                                                                1.06     34.8±0.33µs        ? ?/sec    1.00     33.0±0.29µs        ? ?/sec
convert_columns_prepared 4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)                                          1.07    101.5±1.34µs        ? ?/sec    1.00     95.2±1.60µs        ? ?/sec
convert_columns_prepared 4096 string(30, 0)                                                                                   1.01     29.7±1.24µs        ? ?/sec    1.00     29.6±1.27µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(10, 0)                                                                        1.00     48.8±0.05µs        ? ?/sec    1.00     48.5±0.06µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(100, 0)                                                                       1.00     72.6±0.20µs        ? ?/sec    1.00     72.8±0.18µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(100, 0.5)                                                                     1.00     53.1±0.29µs        ? ?/sec    1.01     53.4±0.19µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary(30, 0)                                                                        1.01     54.6±1.26µs        ? ?/sec    1.00     54.3±1.26µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_low_cardinality(10, 0)                                                        1.00     21.5±0.03µs        ? ?/sec    1.01     21.6±0.04µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_low_cardinality(100, 0)                                                       1.00     32.0±0.03µs        ? ?/sec    1.00     32.0±0.04µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_low_cardinality(30, 0)                                                        1.00     24.1±0.05µs        ? ?/sec    1.00     24.2±0.08µs        ? ?/sec
convert_columns_prepared 4096 string_dictionary_sparse_keys(1M values)                                                                                               1.00    128.0±0.77µs        ? ?/sec
convert_columns_prepared 4096 u64(0)                                                                                          1.00      4.4±0.44µs        ? ?/sec    1.26      5.6±0.01µs        ? ?/sec
convert_columns_prepared 4096 u64(0.3)                                                                                        1.00      5.3±0.01µs        ? ?/sec    1.01      5.4±0.01µs        ? ?/sec
convert_columns_prepared 8192 53 columns                                                                                      1.00   1732.5±5.55µs        ? ?/sec    1.00   1728.8±9.11µs        ? ?/sec
convert_rows 10 large_list(0) of u64(0)                                                                                       1.01    924.0±8.93ns        ? ?/sec    1.00    917.0±4.11ns        ? ?/sec
convert_rows 10 list(0) of u64(0)                                                                                             1.01    978.0±8.33ns        ? ?/sec    1.00    971.4±4.15ns        ? ?/sec
convert_rows 4096 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)                1.00    177.4±0.63µs        ? ?/sec    1.00    176.9±1.24µs        ? ?/sec
convert_rows 4096 53 columns                                                                                                  1.00   1747.9±3.39µs        ? ?/sec    1.00   1741.4±4.09µs        ? ?/sec
convert_rows 4096 bool(0, 0.5)                                                                                                1.00     13.3±0.01µs        ? ?/sec    1.00     13.3±0.01µs        ? ?/sec
convert_rows 4096 bool(0.3, 0.5)                                                                                              1.00     13.3±0.01µs        ? ?/sec    1.00     13.3±0.01µs        ? ?/sec
convert_rows 4096 i64(0)                                                                                                      1.00     26.0±0.02µs        ? ?/sec    1.00     26.0±0.02µs        ? ?/sec
convert_rows 4096 i64(0.3)                                                                                                    1.00     26.0±0.01µs        ? ?/sec    1.00     26.0±0.03µs        ? ?/sec
convert_rows 4096 large_list(0) of u64(0)                                                                                     1.00    157.4±0.34µs        ? ?/sec    1.08    169.3±0.50µs        ? ?/sec
convert_rows 4096 large_list(0) sliced to 10 of u64(0)                                                                        1.00   1225.1±7.33ns        ? ?/sec    1.01   1240.6±2.44ns        ? ?/sec
convert_rows 4096 list(0) of u64(0)                                                                                           1.00    154.9±0.31µs        ? ?/sec    1.09    169.1±0.28µs        ? ?/sec
convert_rows 4096 list(0) sliced to 10 of u64(0)                                                                              1.01   1335.3±6.36ns        ? ?/sec    1.00   1317.4±4.19ns        ? ?/sec
convert_rows 4096 run_primitive(1024 physical)                                                                                1.00     77.0±0.10µs        ? ?/sec    1.00     77.1±0.12µs        ? ?/sec
convert_rows 4096 run_primitive(256 physical)                                                                                 1.00     54.4±0.14µs        ? ?/sec    1.00     54.4±0.12µs        ? ?/sec
convert_rows 4096 run_primitive(512 physical)                                                                                 1.00     62.1±0.06µs        ? ?/sec    1.01     62.5±0.11µs        ? ?/sec
convert_rows 4096 string view(1..100, 0)                                                                                      1.34     76.2±0.42µs        ? ?/sec    1.00     56.7±0.16µs        ? ?/sec
convert_rows 4096 string view(1..100, 0.5)                                                                                    1.71     66.4±0.42µs        ? ?/sec    1.00     38.8±0.09µs        ? ?/sec
convert_rows 4096 string view(10, 0)                                                                                          1.01     43.1±0.09µs        ? ?/sec    1.00     42.7±0.26µs        ? ?/sec
convert_rows 4096 string view(100, 0)                                                                                         1.00     70.1±0.09µs        ? ?/sec    1.01     71.0±0.14µs        ? ?/sec
convert_rows 4096 string view(100, 0.5)                                                                                       1.08     55.2±0.26µs        ? ?/sec    1.00     51.1±0.11µs        ? ?/sec
convert_rows 4096 string view(30, 0)                                                                                          1.00     50.0±0.10µs        ? ?/sec    1.00     50.0±0.12µs        ? ?/sec
convert_rows 4096 string(10, 0)                                                                                               1.00     35.5±0.03µs        ? ?/sec    1.00     35.5±0.03µs        ? ?/sec
convert_rows 4096 string(100, 0)                                                                                              1.01     64.1±0.07µs        ? ?/sec    1.00     63.2±0.08µs        ? ?/sec
convert_rows 4096 string(100, 0.5)                                                                                            1.14     49.8±0.15µs        ? ?/sec    1.00     43.8±0.08µs        ? ?/sec
convert_rows 4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)                                                      1.00    175.2±0.23µs        ? ?/sec    1.01    177.3±0.43µs        ? ?/sec
convert_rows 4096 string(30, 0)                                                                                               1.00     43.9±0.05µs        ? ?/sec    1.02     44.9±0.21µs        ? ?/sec
convert_rows 4096 string_dictionary(10, 0)                                                                                    1.00     35.8±0.05µs        ? ?/sec    1.00     35.7±0.02µs        ? ?/sec
convert_rows 4096 string_dictionary(100, 0)                                                                                   1.02     64.0±0.10µs        ? ?/sec    1.00     62.7±0.09µs        ? ?/sec
convert_rows 4096 string_dictionary(100, 0.5)                                                                                 1.14     50.0±0.13µs        ? ?/sec    1.00     43.7±0.08µs        ? ?/sec
convert_rows 4096 string_dictionary(30, 0)                                                                                    1.01     44.2±0.05µs        ? ?/sec    1.00     43.6±0.03µs        ? ?/sec
convert_rows 4096 string_dictionary_low_cardinality(10, 0)                                                                    1.00     35.6±0.20µs        ? ?/sec    1.00     35.8±0.03µs        ? ?/sec
convert_rows 4096 string_dictionary_low_cardinality(100, 0)                                                                   1.01     63.8±0.08µs        ? ?/sec    1.00     63.1±0.12µs        ? ?/sec
convert_rows 4096 string_dictionary_low_cardinality(30, 0)                                                                    1.01     43.9±0.04µs        ? ?/sec    1.00     43.7±0.03µs        ? ?/sec
convert_rows 4096 string_dictionary_sparse_keys(1M values)                                                                                                           1.00     35.7±0.02µs        ? ?/sec
convert_rows 4096 u64(0)                                                                                                      1.01     25.8±0.01µs        ? ?/sec    1.00     25.6±0.02µs        ? ?/sec
convert_rows 4096 u64(0.3)                                                                                                    1.01     25.8±0.06µs        ? ?/sec    1.00     25.6±0.01µs        ? ?/sec
convert_rows 8192 53 columns                                                                                                  1.00      4.5±0.14ms        ? ?/sec    1.04      4.7±0.23ms        ? ?/sec
convert_rows_parsed 4096 string view(1..100, 0)                                                                               1.00     55.6±0.11µs        ? ?/sec    1.36     75.7±0.49µs        ? ?/sec
convert_rows_parsed 4096 string view(1..100, 0.5)                                                                             1.00     35.4±0.06µs        ? ?/sec    1.76     62.3±0.31µs        ? ?/sec
convert_rows_parsed 4096 string view(10, 0)                                                                                   1.02     44.5±0.23µs        ? ?/sec    1.00     43.4±0.03µs        ? ?/sec
convert_rows_parsed 4096 string view(100, 0)                                                                                  1.01     76.5±0.14µs        ? ?/sec    1.00     75.8±0.10µs        ? ?/sec
convert_rows_parsed 4096 string view(100, 0.5)                                                                                1.00     47.8±0.24µs        ? ?/sec    1.18     56.3±0.37µs        ? ?/sec
convert_rows_parsed 4096 string view(30, 0)                                                                                   1.00     45.6±0.06µs        ? ?/sec    1.00     45.4±0.03µs        ? ?/sec
convert_rows_parsed 4096 string(10, 0)                                                                                        1.00     34.0±0.03µs        ? ?/sec    1.00     34.0±0.02µs        ? ?/sec
convert_rows_parsed 4096 string(100, 0)                                                                                       1.05     79.9±0.24µs        ? ?/sec    1.00     75.9±0.12µs        ? ?/sec
convert_rows_parsed 4096 string(100, 0.5)                                                                                     1.11     55.0±0.18µs        ? ?/sec    1.00     49.3±0.33µs        ? ?/sec
convert_rows_parsed 4096 string(30, 0)                                                                                        1.09     48.1±0.16µs        ? ?/sec    1.00     44.3±0.03µs        ? ?/sec
iterate rows                                                                                                                  1.00      2.0±0.00µs        ? ?/sec    1.00      2.0±0.00µs        ? ?/sec

Per-runner information
row_format — shard 1/1

Node: gk3-benchmark-cluster-nap-hn5nhboo-e5ad4dcb-kgp2

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

uname:

Linux bench-c6434010077-3916-v5lfr 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench row_format
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
Resource Usage

base (merge-base)

Metric Value
Wall time 1530.3s
Peak memory 28.1 MiB
Avg memory 16.6 MiB
CPU user 1523.5s
CPU sys 0.1s
Peak spill 0 B

branch

Metric Value
Wall time 1570.4s
Peak memory 41.0 MiB
Avg memory 21.9 MiB
CPU user 1563.8s
CPU sys 0.1s
Peak spill 0 B

File an issue against this benchmark runner

@Rich-T-kid Rich-T-kid left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I haven't taken too close of a look but the issue & pr discussion make sense. I think we should add benchmarks to get a better guide to when we would want to incure the overhead cost of remapping.

also I think @jayzhan211 would be interested in this as he proposed something similar upstream in datafusion

Comment thread arrow-row/src/lib.rs
// Encoding a dictionary costs time proportional to its values,
// so when they outnumber the rows, gather only the referenced
// values and remap each row's key onto them.
let (values, remap) = match values.len() > dictionary.len() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

There’s some fixed cost to re-hashing the values to create new mappings. Can we benchmark to find out what a decent cutoff would be?

Record batches are typically 8192 rows, so we wouldn’t want to incur this cost when there are only 10k unique values. Or maybe we would 🤔. I think we should have some numbers to back up this decision.

This branch has not been deployed

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

Labels

arrow-core Core crates related to representing arrow data arrow-row arrow-row crate enhancement New feature/addition performance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

RowConverter encodes every dictionary value for each batch, not just the values its rows reference

3 participants