Repository navigation
feat(parquet): add NDV cap for dictionary reads - #26315
Rich-T-kid wants to merge 3 commits into
Conversation
4ba149d to
a18cef2
Compare
|
Thank you for opening this pull request! Reviewer note: cargo-semver-checks reported the current version number is not SemVer-compatible with the changes in this pull request (compared against the base branch). Details |
|
run benchmark tpch tpcds clickbench_partitioned wide_schema env:
DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
baseline:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
changed:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
env:
DATAFUSION_EXECUTION_PARQUET_RLE_TO_DICTIONARY_MAX_DISTINCT_VALUES: "2000" |
|
show benchmark queue |
|
Hi @Rich-T-kid, you asked to view the benchmark queue (#26315 (comment)).
File an issue against this benchmark runner |
|
🤖 Benchmark running (GKE) | trigger CPU Details (lscpu)Comparing 62154dc (62154dc) to 62154dc diff Run configurationrun benchmark tpch
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
changed:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
env:
DATAFUSION_EXECUTION_PARQUET_RLE_TO_DICTIONARY_MAX_DISTINCT_VALUES: "2000"Results will be posted here when complete File an issue against this benchmark runner |
|
🤖 Benchmark running (GKE) | trigger CPU Details (lscpu)Comparing 62154dc (62154dc) to 62154dc diff Run configurationrun benchmark tpcds
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
changed:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
env:
DATAFUSION_EXECUTION_PARQUET_RLE_TO_DICTIONARY_MAX_DISTINCT_VALUES: "2000"Results will be posted here when complete File an issue against this benchmark runner |
|
🤖 Benchmark running (GKE) | trigger CPU Details (lscpu)Comparing 62154dc (62154dc) to 62154dc diff Run configurationrun benchmark clickbench_partitioned
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
changed:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
env:
DATAFUSION_EXECUTION_PARQUET_RLE_TO_DICTIONARY_MAX_DISTINCT_VALUES: "2000"Results will be posted here when complete File an issue against this benchmark runner |
|
🤖 Benchmark running (GKE) | trigger CPU Details (lscpu)Comparing 62154dc (62154dc) to 62154dc diff Run configurationrun benchmark wide_schema
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
changed:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
env:
DATAFUSION_EXECUTION_PARQUET_RLE_TO_DICTIONARY_MAX_DISTINCT_VALUES: "2000"Results will be posted here when complete File an issue against this benchmark runner |
|
🤖 Benchmark completed (GKE) | trigger Instance: Comparing 62154dc (62154dc) to 62154dc diff Run configurationrun benchmark tpch
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
changed:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
env:
DATAFUSION_EXECUTION_PARQUET_RLE_TO_DICTIONARY_MAX_DISTINCT_VALUES: "2000"CPU Details (lscpu)Details
Memory Pool PeaksPeak Base:
Pool accounting vs. process RSS Max pool peak is the largest reservation any single query in the run reached; peak RSS covers the whole invocation, including data loading and allocator retention, and the two high-water marks need not coincide in time. The gap is therefore an upper bound on what the pool did not account for, not a measurement of it.
Resource Usagetpch — base (merge-base)
tpch — branch
File an issue against this benchmark runner |
|
🤖 Benchmark completed (GKE) | trigger Instance: Comparing 62154dc (62154dc) to 62154dc diff Run configurationrun benchmark tpcds
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
changed:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
env:
DATAFUSION_EXECUTION_PARQUET_RLE_TO_DICTIONARY_MAX_DISTINCT_VALUES: "2000"CPU Details (lscpu)Details
Memory Pool PeaksPeak Base:
Pool accounting vs. process RSS Max pool peak is the largest reservation any single query in the run reached; peak RSS covers the whole invocation, including data loading and allocator retention, and the two high-water marks need not coincide in time. The gap is therefore an upper bound on what the pool did not account for, not a measurement of it.
Resource Usagetpcds — base (merge-base)
tpcds — branch
File an issue against this benchmark runner |
|
🤖 Benchmark completed (GKE) | trigger Instance: Comparing 62154dc (62154dc) to 62154dc diff Run configurationrun benchmark clickbench_partitioned
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
changed:
ref: "62154dc1b38737c3e15dd423ed8617d19f52ed65"
env:
DATAFUSION_EXECUTION_PARQUET_RLE_TO_DICTIONARY_MAX_DISTINCT_VALUES: "2000"CPU Details (lscpu)Details
Memory Pool PeaksPeak Base:
Pool accounting vs. process RSS Max pool peak is the largest reservation any single query in the run reached; peak RSS covers the whole invocation, including data loading and allocator retention, and the two high-water marks need not coincide in time. The gap is therefore an upper bound on what the pool did not account for, not a measurement of it.
Resource Usageclickbench_partitioned — base (merge-base)
clickbench_partitioned — branch
File an issue against this benchmark runner |
Which issue does this PR close?
Rationale for this change
enable_rle_to_dictionarypromotes eligible Parquet string and binary columns whenever dictionary pages are present. High-cardinality columns can therefore be inferred as large dictionary arrays without a user-defined bound.What changes are included in this PR?
Adds
datafusion.execution.parquet.rle_to_dictionary_max_distinct_values, an optional absolute NDV cap for dictionary read inference. When set, columns are promoted only when row-group NDV statistics prove they are within the cap; columns with missing statistics or values above the cap remain plain. The option is also wired through multi-file schema inference, protobuf, and documentation.What is the testing strategy for this PR?
parquet_rle_to_dictionary.sltfor missing, below-cap, above-cap, multi-row-group, and multi-file behavior.Are there any user-facing changes?
Yes. Users can set
datafusion.execution.parquet.rle_to_dictionary_max_distinct_valuesto an absolute distinct-value limit. The default isNULL, which preserves the existing dictionary inference behavior.