Skip to content

Prune parquet row groups using fully dictionary-encoded columns#23851

Draft
DarkWanderer wants to merge 4 commits into
apache:mainfrom
DarkWanderer:dictionary-filter
Draft

Prune parquet row groups using fully dictionary-encoded columns#23851
DarkWanderer wants to merge 4 commits into
apache:mainfrom
DarkWanderer:dictionary-filter

Conversation

@DarkWanderer

@DarkWanderer DarkWanderer commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

N/A

Rationale for this change

Dictionary pages are essentially free, exact indexes for IN/NOT IN queries. Bloom filters can prove a target value is absent from a row group (useful for pruning =/IN), but they are probabilistic (non-zero false-positive rate) and cannot prove a NOT IN/!= exclusion, since that would require confirming every distinct value in the row group is excluded -- information a bloom filter doesn't retain. A fully dictionary-encoded column chunk does retain the complete set of distinct values, so it can prune exactly in both directions: IN/= when the dictionary is disjoint from the target set, and NOT IN/!= when the dictionary is a subset of the excluded set. This approach stacks with bloom filters: dictionary pruning subsumes bloom-filter pruning where it applies, and is exact (no false positives) where bloom filters are only probabilistic.

What changes are included in this PR?

  • New opt-in datafusion.execution.parquet.dictionary_filter_on_read
    config option (default false).
  • DictionaryStatistics (dictionary_filter.rs): an exact
    PruningStatistics impl backed by decoded dictionary values, plus
    is_fully_dictionary_encoded, which gates use of a chunk's
    dictionary on its page encoding stats being exactly
    PLAIN_DICTIONARY/RLE_DICTIONARY (a writer that fell back to
    PLAIN partway through no longer has a complete dictionary).
  • RowGroupAccessPlanFilter::prune_by_dictionary and a
    LoadDictionaries/PruneWithDictionaries stage in the Parquet
    opener's state machine, mirroring the existing bloom-filter stage.
  • A new row_groups_pruned_dictionary metric, .slt coverage
    (parquet_dictionary_pruning.slt, plus the metric added to existing
    EXPLAIN ANALYZE golden files), and a criterion benchmark comparing
    statistics-only vs. bloom-filter vs. dictionary pruning.

This depends on a new arrow-rs API to decode a Parquet dictionary page: apache/arrow-rs#10420
(apache/arrow-rs#9010).

Temporary [patch.crates-io] commit in PR exists to cover that

Are these changes tested?

Yes: unit tests in dictionary_filter.rs mirroring bloom_filter.rs
(absent value, IN list absent, present value, != sole value,
NOT IN list, and a PLAIN-fallback chunk correctly not pruned), new
.slt coverage showing row_groups_pruned_dictionary in
EXPLAIN ANALYZE, and a criterion benchmark.

Are there any user-facing changes?

Yes: a new opt-in config option dictionary_filter_on_read (default
false, no behavior change unless enabled) and a new
row_groups_pruned_dictionary metric in EXPLAIN ANALYZE.

Adds an opt-in `dictionary_filter_on_read` config option (default
false) that uses a fully dictionary-encoded BYTE_ARRAY (Utf8/Binary)
column chunk's dictionary as an exact row-group membership index.
Unlike the existing bloom-filter pruning stage, this is exact rather
than probabilistic, so it can prune both `IN`/`=` (value absent) and
`NOT IN`/`!=` (value is the chunk's only value) predicates.

A column chunk is only used if its page encoding stats prove every
data page came from the dictionary (`PLAIN_DICTIONARY` or
`RLE_DICTIONARY` only) -- chunks that fell back to `PLAIN` encoding
partway through are ignored, since a writer's dictionary fallback
means the dictionary is no longer the complete value set.

This depends on a new arrow-rs API to decode a dictionary page
independent of the row-by-row array reader (arrow-rs#9010), not yet
released; see the following commit for the temporary patch.
…anch

Switches the [patch.crates-io] block from a local filesystem path to
https://github.com/DarkWanderer/arrow-rs/tree/get-dictionary, so the
build is reproducible for anyone (including CI) rather than only on
one machine. Still temporary -- to be removed once arrow-rs releases
a version with the dictionary decode API and the dependency is bumped
normally.
@github-actions github-actions Bot added documentation Improvements or additions to documentation sqllogictest SQL Logic Tests (.slt) common Related to common crate proto Related to proto crate datasource Changes to the datasource crate labels Jul 23, 2026
@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown

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
     Cloning apache/main
    Building datafusion-common v54.1.0 (current)
       Built [  34.227s] (current)
     Parsing datafusion-common v54.1.0 (current)
      Parsed [   0.065s] (current)
    Building datafusion-common v54.1.0 (baseline)
       Built [  33.726s] (baseline)
     Parsing datafusion-common v54.1.0 (baseline)
      Parsed [   0.066s] (baseline)
    Checking datafusion-common v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   0.992s] 223 checks: 222 pass, 1 fail, 0 warn, 30 skip

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.49.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field ParquetOptions.dictionary_filter_on_read in /home/runner/work/datafusion/datafusion/datafusion/common/src/config.rs:1103

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  70.790s] datafusion-common
    Building datafusion-datasource-parquet v54.1.0 (current)
       Built [  46.031s] (current)
     Parsing datafusion-datasource-parquet v54.1.0 (current)
      Parsed [   0.034s] (current)
    Building datafusion-datasource-parquet v54.1.0 (baseline)
       Built [  45.493s] (baseline)
     Parsing datafusion-datasource-parquet v54.1.0 (baseline)
      Parsed [   0.035s] (baseline)
    Checking datafusion-datasource-parquet v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   0.228s] 223 checks: 222 pass, 1 fail, 0 warn, 30 skip

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.49.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field ParquetFileMetrics.row_groups_pruned_dictionary in /home/runner/work/datafusion/datafusion/datafusion/datasource-parquet/src/metrics.rs:53

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  93.184s] datafusion-datasource-parquet
    Building datafusion-physical-expr-common v54.1.0 (current)
       Built [  23.554s] (current)
     Parsing datafusion-physical-expr-common v54.1.0 (current)
      Parsed [   0.023s] (current)
    Building datafusion-physical-expr-common v54.1.0 (baseline)
       Built [  23.448s] (baseline)
     Parsing datafusion-physical-expr-common v54.1.0 (baseline)
      Parsed [   0.024s] (baseline)
    Checking datafusion-physical-expr-common v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   0.291s] 223 checks: 223 pass, 30 skip
     Summary no semver update required
    Finished [  48.178s] datafusion-physical-expr-common
    Building datafusion-proto v54.1.0 (current)
error: running cargo-doc on crate 'datafusion-proto' failed with output:
-----
   Compiling proc-macro2 v1.0.107
   Compiling quote v1.0.47
   Compiling unicode-ident v1.0.24
   Compiling libc v0.2.189
    Checking cfg-if v1.0.4
   Compiling libm v0.2.16
    Checking memchr v2.8.3
   Compiling autocfg v1.5.1
   Compiling num-traits v0.2.19
   Compiling syn v2.0.119
   Compiling zerocopy v0.8.55
    Checking bytes v1.12.1
   Compiling serde_core v1.0.229
    Checking equivalent v1.0.2
    Checking itoa v1.0.18
   Compiling getrandom v0.3.4
    Checking once_cell v1.21.4
    Checking foldhash v0.2.0
    Checking allocator-api2 v0.2.21
   Compiling zmij v1.0.23
    Checking hashbrown v0.17.1
   Compiling serde_json v1.0.151
    Checking num-integer v0.1.46
    Checking indexmap v2.14.0
    Checking siphasher v1.0.3
   Compiling version_check v0.9.5
    Checking iana-time-zone v0.1.65
    Checking chrono v0.4.45
   Compiling ahash v0.8.12
    Checking phf_shared v0.12.1
   Compiling jobserver v0.1.35
    Checking num-bigint v0.4.8
   Compiling shlex v2.0.1
   Compiling synstructure v0.13.2
    Checking stable_deref_trait v1.2.1
   Compiling find-msvc-tools v0.1.9
   Compiling chrono-tz v0.10.4
   Compiling cc v1.3.0
    Checking arrow-schema v59.1.0
    Checking phf v0.12.1
   Compiling pkg-config v0.3.33
    Checking num-complex v0.4.6
    Checking pin-project-lite v0.2.17
   Compiling syn v3.0.3
   Compiling zerocopy-derive v0.8.55
   Compiling zerofrom-derive v0.1.7
    Checking zerofrom v0.1.8
   Compiling yoke-derive v0.8.2
    Checking yoke v0.8.3
   Compiling zerovec-derive v0.11.3
    Checking zerovec v0.11.6
   Compiling displaydoc v0.2.6
   Compiling zstd-sys v2.0.16+zstd.1.5.7
    Checking writeable v0.6.3
    Checking tinystr v0.8.3
    Checking litemap v0.8.2
    Checking smallvec v1.15.2
    Checking lexical-util v1.0.7
    Checking futures-sink v0.3.33
    Checking futures-core v0.3.33
    Checking icu_locale_core v2.2.0
    Checking zerotrie v0.2.4
    Checking potential_utf v0.1.5
   Compiling icu_normalizer_data v2.2.0
   Compiling icu_properties_data v2.2.0
    Checking utf8_iter v1.0.4
    Checking half v2.7.1
    Checking icu_provider v2.2.0
    Checking icu_collections v2.2.0
   Compiling zstd-safe v7.2.4
    Checking arrow-buffer v59.1.0
   Compiling semver v1.0.28
   Compiling rustc_version v0.4.1
    Checking lexical-parse-integer v1.0.6
    Checking lexical-write-integer v1.0.6
    Checking futures-channel v0.3.33
    Checking arrow-data v59.1.0
   Compiling futures-macro v0.3.33
   Compiling tokio-macros v2.7.1
    Checking arrow-array v59.1.0
   Compiling parking_lot_core v0.9.12
    Checking slab v0.4.12
    Checking futures-task v0.3.33
    Checking bitflags v2.13.1
    Checking base64 v0.22.1
    Checking futures-io v0.3.33
    Checking futures-util v0.3.33
    Checking tokio v1.53.1
    Checking arrow-select v59.1.0
    Checking lexical-write-float v1.0.6
   Compiling flatbuffers v25.12.19
    Checking lexical-parse-float v1.0.6
    Checking icu_properties v2.2.0
    Checking icu_normalizer v2.2.0
    Checking aho-corasick v1.1.4
   Compiling crc32fast v1.5.0
    Checking unicode-segmentation v1.13.3
    Checking regex-syntax v0.8.11
   Compiling getrandom v0.4.3
    Checking ryu v1.0.23
    Checking scopeguard v1.2.0
    Checking unicode-width v0.2.2
    Checking lock_api v0.4.14
    Checking comfy-table v7.2.2
    Checking idna_adapter v1.2.2
    Checking lexical-core v1.0.6
    Checking arrow-ord v59.1.0
    Checking atoi v2.0.0
    Checking percent-encoding v2.3.2
    Checking alloc-no-stdlib v2.0.4
    Checking adler2 v2.0.1
   Compiling thiserror v2.0.19
    Checking simd-adler32 v0.3.10
   Compiling snap v1.1.2
    Checking twox-hash v2.1.3
    Checking either v1.16.0
    Checking lz4_flex v0.13.1
    Checking regex-automata v0.4.16
    Checking miniz_oxide v0.8.9
    Checking arrow-cast v59.1.0
    Checking alloc-stdlib v0.2.4
    Checking form_urlencoded v1.2.2
    Checking idna v1.1.0
    Checking futures-executor v0.3.33
   Compiling thiserror-impl v2.0.19
   Compiling tracing-attributes v0.1.31
    Checking regex v1.13.1
    Checking tracing-core v0.1.36
    Checking csv-core v0.1.13
    Checking zlib-rs v0.6.6
   Compiling paste v1.0.15
    Checking simdutf8 v0.1.5
    Checking same-file v1.0.6
    Checking tracing v0.1.44
    Checking walkdir v2.5.0
    Checking csv v1.4.0
    Checking futures v0.3.33
    Checking url v2.5.8
    Checking brotli-decompressor v5.0.3
    Checking itertools v0.14.0
    Checking flate2 v1.1.9
    Checking parking_lot v0.12.5
   Compiling async-trait v0.1.91
    Checking http v1.4.2
   Compiling serde v1.0.229
    Checking humantime v2.4.0
   Compiling anyhow v1.0.104
    Checking brotli v8.0.4
    Checking object_store v0.13.2
    Checking arrow-csv v59.1.0
    Checking arrow-json v59.1.0
    Checking arrow-string v59.1.0
    Checking zstd v0.13.3
    Checking arrow-ipc v59.1.0
    Checking uuid v1.24.0
    Checking arrow-arith v59.1.0
    Checking arrow-row v59.1.0
   Compiling serde_derive v1.0.229
    Checking log v0.4.33
   Compiling seq-macro v0.3.6
    Checking arrow v59.1.0
    Checking parquet v59.1.0
    Checking itertools v0.15.0
   Compiling prost-derive v0.14.4
   Compiling pin-project-internal v1.1.13
    Checking pin-project v1.1.13
    Checking ppv-lite86 v0.2.21
    Checking rand_core v0.9.5
    Checking prost v0.14.4
    Checking pbjson v0.9.0
   Compiling rustix v1.1.4
   Compiling crossbeam-utils v0.8.22
    Checking rand_chacha v0.9.0
    Checking linux-raw-sys v0.12.1
    Checking datafusion-doc v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/doc)
    Checking rand v0.9.5
    Checking tokio-util v0.7.19
    Checking foldhash v0.1.5
    Checking hashbrown v0.14.5
    Checking fastrand v2.5.0
    Checking hashbrown v0.15.5
    Checking dashmap v6.2.1
    Checking fixedbitset v0.5.7
    Checking petgraph v0.8.3
   Compiling datafusion-macros v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/macros)
    Checking tempfile v3.27.0
    Checking hex v0.4.3
    Checking datafusion-common-runtime v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/common-runtime)
    Checking datafusion-common v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/common)
    Checking glob v0.3.4
   Compiling liblzma-sys v0.4.7
    Checking crc-catalog v2.5.0
    Checking libbz2-rs-sys v0.2.5
   Compiling heck v0.5.0
   Compiling strum_macros v0.28.0
    Checking bzip2 v0.6.1
    Checking crc v3.4.0
    Checking tokio-stream v0.1.19
    Checking datafusion-proto-common v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/proto-common)
    Checking datafusion-expr-common v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/expr-common)
    Checking datafusion-proto-models v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/proto-models)
    Checking liblzma v0.4.7
    Checking arrow-avro v59.1.0
    Checking datafusion-physical-expr-common v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/physical-expr-common)
    Checking datafusion-functions-aggregate-common v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/functions-aggregate-common)
    Checking datafusion-functions-window-common v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/functions-window-common)
    Checking datafusion-expr v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/expr)
    Checking datafusion-execution v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/execution)
    Checking datafusion-physical-expr v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/physical-expr)
    Checking datafusion-functions v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/functions)
    Checking datafusion-physical-plan v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/physical-plan)
    Checking datafusion-physical-expr-adapter v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/physical-expr-adapter)
    Checking datafusion-session v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/session)
    Checking datafusion-datasource v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/datasource)
    Checking datafusion-catalog v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/catalog)
    Checking datafusion-pruning v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/pruning)
    Checking datafusion-datasource-avro v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/datasource-avro)
    Checking datafusion-datasource-csv v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/datasource-csv)
    Checking datafusion-datasource-arrow v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/datasource-arrow)
    Checking datafusion-datasource-parquet v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/datasource-parquet)
    Checking datafusion-datasource-json v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/datasource-json)
error[E0599]: no method named `get_row_group_column_dictionary` found for struct `ArrowReaderBuilder<T>` in the current scope
    --> /home/runner/work/datafusion/datafusion/datafusion/datasource-parquet/src/opener/mod.rs:1377:26
     |
1376 |                       let dictionary = match builder
     |  ____________________________________________-
1377 | |                         .get_row_group_column_dictionary(idx, *column_idx)
     | |_________________________-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     |
help: there is a method `get_row_group_column_bloom_filter` with a similar name
     |
1377 -                         .get_row_group_column_dictionary(idx, *column_idx)
1377 +                         .get_row_group_column_bloom_filter(idx, *column_idx)
     |

For more information about this error, try `rustc --explain E0599`.
error: could not compile `datafusion-datasource-parquet` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...

-----

error: failed to build rustdoc for crate datafusion-proto v54.1.0
note: this is usually due to a compilation error in the crate,
      and is unlikely to be a bug in cargo-semver-checks
note: the following command can be used to reproduce the error:
      cargo new --lib example &&
          cd example &&
          echo '[workspace]' >> Cargo.toml &&
          cargo add --path /home/runner/work/datafusion/datafusion/datafusion/proto --features avro,datafusion-datasource-avro,datafusion-datasource-parquet,default,json,parquet,serde_json &&
          cargo check &&
          cargo doc

    Building datafusion-proto-common v54.1.0 (current)
       Built [  21.801s] (current)
     Parsing datafusion-proto-common v54.1.0 (current)
      Parsed [   0.050s] (current)
    Building datafusion-proto-common v54.1.0 (baseline)
       Built [  21.852s] (baseline)
     Parsing datafusion-proto-common v54.1.0 (baseline)
      Parsed [   0.051s] (baseline)
    Checking datafusion-proto-common v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   1.598s] 223 checks: 222 pass, 1 fail, 0 warn, 30 skip

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.49.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field ParquetOptions.dictionary_filter_on_read in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:861
  field ParquetOptions.dictionary_filter_on_read in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:861
  field ParquetOptions.dictionary_filter_on_read in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:861

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  46.347s] datafusion-proto-common
    Building datafusion-proto-models v54.1.0 (current)
       Built [  24.609s] (current)
     Parsing datafusion-proto-models v54.1.0 (current)
      Parsed [   0.138s] (current)
    Building datafusion-proto-models v54.1.0 (baseline)
       Built [  25.119s] (baseline)
     Parsing datafusion-proto-models v54.1.0 (baseline)
      Parsed [   0.140s] (baseline)
    Checking datafusion-proto-models v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   2.831s] 223 checks: 222 pass, 1 fail, 0 warn, 30 skip

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.49.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field ParquetOptions.dictionary_filter_on_read in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:861
  field ParquetOptions.dictionary_filter_on_read in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:861

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  55.094s] datafusion-proto-models
    Building datafusion-sqllogictest v54.1.0 (current)
error: running cargo-doc on crate 'datafusion-sqllogictest' failed with output:
-----
   Compiling proc-macro2 v1.0.107
   Compiling unicode-ident v1.0.24
   Compiling quote v1.0.47
   Compiling libc v0.2.189
    Checking cfg-if v1.0.4
    Checking bytes v1.12.1
    Checking memchr v2.8.3
   Compiling serde_core v1.0.229
   Compiling syn v2.0.119
   Compiling autocfg v1.5.1
   Compiling jobserver v0.1.35
   Compiling shlex v2.0.1
   Compiling find-msvc-tools v0.1.9
   Compiling cc v1.3.0
    Checking itoa v1.0.18
    Checking foldhash v0.2.0
    Checking allocator-api2 v0.2.21
    Checking once_cell v1.21.4
    Checking equivalent v1.0.2
   Compiling syn v3.0.3
   Compiling libm v0.2.16
   Compiling num-traits v0.2.19
    Checking hashbrown v0.17.1
    Checking indexmap v2.14.0
    Checking pin-project-lite v0.2.17
   Compiling zmij v1.0.23
    Checking futures-core v0.3.33
   Compiling zerocopy v0.8.55
    Checking futures-sink v0.3.33
    Checking errno v0.3.14
    Checking signal-hook-registry v1.4.8
    Checking socket2 v0.6.5
    Checking mio v1.2.2
   Compiling version_check v0.9.5
   Compiling serde v1.0.229
    Checking num-integer v0.1.46
   Compiling serde_json v1.0.151
    Checking slab v0.4.12
    Checking futures-channel v0.3.33
    Checking smallvec v1.15.2
   Compiling zerocopy-derive v0.8.55
   Compiling tokio-macros v2.7.1
   Compiling getrandom v0.3.4
   Compiling serde_derive v1.0.229
    Checking tokio v1.53.1
   Compiling futures-macro v0.3.33
    Checking num-bigint v0.4.8
   Compiling synstructure v0.13.2
    Checking http v1.4.2
    Checking futures-io v0.3.33
    Checking futures-task v0.3.33
    Checking base64 v0.22.1
    Checking futures-util v0.3.33
    Checking iana-time-zone v0.1.65
    Checking chrono v0.4.45
   Compiling zerofrom-derive v0.1.7
   Compiling tracing-attributes v0.1.31
    Checking tracing-core v0.1.36
    Checking siphasher v1.0.3
    Checking zerofrom v0.1.8
   Compiling yoke-derive v0.8.2
    Checking rand_core v0.10.1
    Checking tracing v0.1.44
    Checking stable_deref_trait v1.2.1
   Compiling getrandom v0.4.3
    Checking num-complex v0.4.6
   Compiling zerovec-derive v0.11.3
    Checking getrandom v0.2.17
    Checking cpufeatures v0.3.0
   Compiling pkg-config v0.3.33
    Checking phf_shared v0.12.1
    Checking half v2.7.1
    Checking yoke v0.8.3
   Compiling displaydoc v0.2.6
   Compiling ahash v0.8.12
    Checking percent-encoding v2.3.2
   Compiling chrono-tz v0.10.4
   Compiling thiserror v2.0.19
    Checking zerovec v0.11.6
    Checking arrow-buffer v59.1.0
    Checking phf v0.12.1
    Checking arrow-schema v59.1.0
   Compiling thiserror-impl v2.0.19
   Compiling ring v0.17.14
    Checking arrow-data v59.1.0
   Compiling semver v1.0.28
    Checking log v0.4.33
    Checking tinystr v0.8.3
    Checking chacha20 v0.10.1
    Checking bitflags v2.13.1
    Checking untrusted v0.9.0
    Checking writeable v0.6.3
    Checking litemap v0.8.2
    Checking rand v0.10.2
    Checking icu_locale_core v2.2.0
    Checking potential_utf v0.1.5
    Checking zerotrie v0.2.4
   Compiling zstd-sys v2.0.16+zstd.1.5.7
   Compiling async-trait v0.1.91
   Compiling icu_properties_data v2.2.0
    Checking utf8_iter v1.0.4
   Compiling icu_normalizer_data v2.2.0
    Checking icu_collections v2.2.0
    Checking icu_provider v2.2.0
    Checking tokio-util v0.7.19
    Checking aho-corasick v1.1.4
    Checking lexical-util v1.0.7
    Checking ryu v1.0.23
    Checking regex-syntax v0.8.11
    Checking arrow-array v59.1.0
   Compiling object v0.37.3
   Compiling zstd-safe v7.2.4
    Checking regex-automata v0.4.16
    Checking icu_normalizer v2.2.0
    Checking icu_properties v2.2.0
    Checking arrow-select v59.1.0
   Compiling rustix v1.1.4
    Checking either v1.16.0
    Checking idna_adapter v1.2.2
    Checking form_urlencoded v1.2.2
    Checking unicode-width v0.2.2
    Checking regex v1.13.1
   Compiling parking_lot_core v0.9.12
   Compiling crc32fast v1.5.0
    Checking typenum v1.20.1
    Checking idna v1.1.0
    Checking lexical-parse-integer v1.0.6
    Checking lexical-write-integer v1.0.6
   Compiling rustc_version v0.4.1
    Checking futures-executor v0.3.33
   Compiling pin-project-internal v1.1.13
    Checking adler2 v2.0.1
    Checking simd-adler32 v0.3.10
    Checking scopeguard v1.2.0
    Checking lock_api v0.4.14
    Checking miniz_oxide v0.8.9
    Checking futures v0.3.33
   Compiling flatbuffers v25.12.19
    Checking lexical-write-float v1.0.6
    Checking pin-project v1.1.13
    Checking lexical-parse-float v1.0.6
    Checking url v2.5.8
    Checking zlib-rs v0.6.6
    Checking unicode-segmentation v1.13.3
    Checking comfy-table v7.2.2
   Compiling ar_archive_writer v0.5.2
    Checking lexical-core v1.0.6
    Checking itertools v0.14.0
    Checking flate2 v1.1.9
   Compiling psm v0.1.31
    Checking arrow-ord v59.1.0
    Checking twox-hash v2.1.3
    Checking atoi v2.0.0
   Compiling stacker v0.1.24
    Checking hex v0.4.3
    Checking alloc-no-stdlib v2.0.4
   Compiling snap v1.1.2
    Checking alloc-stdlib v0.2.4
    Checking lz4_flex v0.13.1
    Checking arrow-cast v59.1.0
    Checking parking_lot v0.12.5
    Checking csv-core v0.1.13
    Checking same-file v1.0.6
   Compiling paste v1.0.15
    Checking humantime v2.4.0
    Checking simdutf8 v0.1.5
    Checking csv v1.4.0
    Checking walkdir v2.5.0
    Checking brotli-decompressor v5.0.3
   Compiling recursive-proc-macro-impl v0.1.1
    Checking subtle v2.6.1
    Checking arrow-json v59.1.0
    Checking recursive v0.1.1
    Checking arrow-csv v59.1.0
    Checking object_store v0.13.2
    Checking brotli v8.0.4
    Checking arrow-string v59.1.0
    Checking arrow-arith v59.1.0
    Checking zstd v0.13.3
    Checking arrow-ipc v59.1.0
    Checking arrow-row v59.1.0
    Checking uuid v1.24.0
   Compiling sqlparser_derive v0.5.0
   Compiling seq-macro v0.3.6
    Checking sqlparser v0.62.0
    Checking itertools v0.15.0
    Checking arrow v59.1.0
    Checking ppv-lite86 v0.2.21
    Checking parquet v59.1.0
    Checking hybrid-array v0.4.13
    Checking cmov v0.5.4
    Checking linux-raw-sys v0.12.1
    Checking ctutils v0.4.2
    Checking crypto-common v0.2.2
    Checking block-buffer v0.12.1
    Checking rand_core v0.9.5
   Compiling generic-array v0.14.7
    Checking const-oid v0.10.2
    Checking digest v0.11.3
    Checking rand_chacha v0.9.0
    Checking rand v0.9.5
    Checking datafusion-doc v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/doc)
    Checking foldhash v0.1.5
   Compiling crossbeam-utils v0.8.22
    Checking crypto-common v0.1.7
    Checking block-buffer v0.10.4
    Checking hashbrown v0.15.5
   Compiling heck v0.5.0
    Checking fixedbitset v0.5.7
    Checking fastrand v2.5.0
    Checking tempfile v3.27.0
    Checking petgraph v0.8.3
    Checking digest v0.10.7
    Checking sha2 v0.11.0
    Checking md-5 v0.11.0
    Checking hashbrown v0.14.5
   Compiling datafusion-macros v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/macros)
   Compiling blake3 v1.8.5
   Compiling anyhow v1.0.104
    Checking dashmap v6.2.1
    Checking arrayref v0.3.9
    Checking constant_time_eq v0.4.2
    Checking arrayvec v0.7.8
    Checking blake2 v0.10.6
   Compiling liblzma-sys v0.4.7
    Checking libbz2-rs-sys v0.2.5
    Checking bzip2 v0.6.1
    Checking datafusion-common-runtime v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/common-runtime)
   Compiling httparse v1.10.1
   Compiling prost-derive v0.14.4
    Checking compression-core v0.4.32
    Checking http-body v1.1.0
    Checking glob v0.3.4
    Checking tower-service v0.3.3
    Checking fnv v1.0.7
    Checking try-lock v0.2.5
    Checking atomic-waker v1.1.2
    Checking h2 v0.4.15
    Checking want v0.3.1
    Checking tokio-stream v0.1.19
    Checking httpdate v1.0.3
    Checking zeroize v1.9.0
    Checking rustls-pki-types v1.15.1
    Checking hyper v1.11.0
    Checking datafusion-common v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/common)
   Compiling prost v0.14.4
    Checking hyper-util v0.1.20
    Checking http-body-util v0.1.4
    Checking tower-layer v0.3.3
   Compiling prettyplease v0.2.37
   Compiling rustls v0.23.42
    Checking sync_wrapper v1.0.2
    Checking datafusion-expr-common v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/expr-common)
   Compiling prost-types v0.14.4
    Checking liblzma v0.4.7
    Checking compression-codecs v0.4.38
    Checking async-compression v0.4.42
    Checking rustls-webpki v0.103.13
    Checking datafusion-physical-expr-common v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/physical-expr-common)
   Compiling serde_derive_internals v0.29.1
    Checking datafusion-functions-window-common v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/functions-window-common)
    Checking datafusion-functions-aggregate-common v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/functions-aggregate-common)
    Checking mime v0.3.17
   Compiling schemars v0.8.22
   Compiling hashbrown v0.16.1
   Compiling schemars_derive v0.8.22
    Checking datafusion-expr v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/expr)
    Checking axum-core v0.5.6
    Checking tower v0.5.3
   Compiling dyn-clone v1.0.20
    Checking matchit v0.8.4
   Compiling multimap v0.10.1
   Compiling prost-build v0.14.4
    Checking axum v0.8.9
    Checking datafusion-physical-expr v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/physical-expr)
    Checking datafusion-execution v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/execution)
    Checking datafusion-functions v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/functions)
   Compiling regress v0.10.5
   Compiling pbjson-build v0.8.0
    Checking hyper-timeout v0.5.2
   Compiling strsim v0.11.1
   Compiling ident_case v1.0.1
   Compiling portable-atomic v1.14.0
   Compiling darling_core v0.23.0
   Compiling typify-impl v0.5.0
    Checking tonic v0.14.6
    Checking datafusion-physical-plan v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/physical-plan)
    Checking datafusion-physical-expr-adapter v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/physical-expr-adapter)
   Compiling serde_tokenstream v0.2.3
    Checking ureq-proto v0.6.0
   Compiling bigdecimal v0.4.10
    Checking utf8-zero v0.8.1
    Checking crc-catalog v2.5.0
   Compiling bollard-buildkit-proto v0.7.0
    Checking utf8parse v0.2.2
    Checking tinyvec_macros v0.1.1
    Checking anstyle-parse v1.0.0
    Checking tinyvec v1.12.0
    Checking crc v3.4.0
    Checking ureq v3.3.0
   Compiling darling_macro v0.23.0
    Checking tonic-prost v0.14.6
    Checking datafusion-functions-aggregate v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/functions-aggregate)
   Compiling strum_macros v0.28.0
   Compiling typify-macro v0.5.0
   Compiling structmeta-derive v0.3.0
    Checking deranged v0.5.8
    Checking anstyle-query v1.1.5
    Checking anstyle v1.0.14
    Checking colorchoice v1.0.5
    Checking powerfmt v0.2.0
    Checking is_terminal_polyfill v1.70.2
    Checking num-conv v0.2.2
    Checking time-core v0.1.9
   Compiling unsafe-libyaml v0.2.11
    Checking anstream v1.0.0
   Compiling structmeta v0.3.0
    Checking datafusion-functions-nested v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/functions-nested)
    Checking time v0.3.54
   Compiling serde_yaml v0.9.34+deprecated
    Checking datafusion-session v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/session)
    Checking arrow-avro v59.1.0
   Compiling typify v0.5.0
   Compiling darling v0.23.0
    Checking unicode-normalization v0.1.25
   Compiling pbjson-types v0.8.0
    Checking tokio-rustls v0.26.4
    Checking num-rational v0.4.2
   Compiling serde_repr v0.1.21
   Compiling async-stream-impl v0.3.6
    Checking num-iter v0.1.46
    Checking openssl-probe v0.2.1
    Checking unicode-bidi v0.3.18
    Checking clap_lex v1.1.0
    Checking unicode-properties v0.1.4
    Checking bollard-stubs v1.52.1-rc.29.1.3
    Checking clap_builder v4.6.2
    Checking stringprep v0.1.5
    Checking rustls-native-certs v0.8.4
    Checking async-stream v0.3.6
    Checking num v0.4.3
    Checking hyper-rustls v0.27.9
    Checking datafusion-sql v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/sql)
   Compiling serde_with_macros v3.21.0
   Compiling substrait v0.63.0
   Compiling parse-display-derive v0.9.1
    Checking datafusion-functions-window v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/functions-window)
    Checking datafusion-optimizer v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/optimizer)
    Checking hyperlocal v0.9.1
   Compiling clap_derive v4.6.4
    Checking xattr v1.6.1
    Checking hmac v0.13.0
    Checking serde_urlencoded v0.7.1
    Checking pbjson v0.8.0
    Checking rand_core v0.6.4
   Compiling enum-ordinalize-derive v4.4.1
    Checking datafusion-datasource v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/datasource)
   Compiling fs-err v3.3.1
    Checking fallible-iterator v0.2.0
    Checking rustc-hash v2.1.3
    Checking home v0.5.12
   Compiling owo-colors v4.3.0
    Checking byteorder v1.5.0
    Checking postgres-protocol v0.6.12
    Checking astral-tokio-tar v0.6.4
   Compiling enum-ordinalize v4.4.1
    Checking clap v4.6.4
    Checking rand_chacha v0.3.1
    Checking datafusion-catalog v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/catalog)
    Checking datafusion-pruning v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/pruning)
    Checking datafusion-datasource-parquet v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/datasource-parquet)
    Checking datafusion-physical-optimizer v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/physical-optimizer)
error[E0599]: no method named `get_row_group_column_dictionary` found for struct `ArrowReaderBuilder<T>` in the current scope
    --> /home/runner/work/datafusion/datafusion/datafusion/datasource-parquet/src/opener/mod.rs:1377:26
     |
1376 |                       let dictionary = match builder
     |  ____________________________________________-
1377 | |                         .get_row_group_column_dictionary(idx, *column_idx)
     | |_________________________-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     |
help: there is a method `get_row_group_column_bloom_filter` with a similar name
     |
1377 -                         .get_row_group_column_dictionary(idx, *column_idx)
1377 +                         .get_row_group_column_bloom_filter(idx, *column_idx)
     |

    Checking datafusion-datasource-json v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/datasource-json)
    Checking datafusion-datasource-csv v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/datasource-csv)
    Checking datafusion-datasource-arrow v54.1.0 (/home/runner/work/datafusion/datafusion/datafusion/datasource-arrow)
For more information about this error, try `rustc --explain E0599`.
error: could not compile `datafusion-datasource-parquet` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...

-----

error: failed to build rustdoc for crate datafusion-sqllogictest v54.1.0
note: this is usually due to a compilation error in the crate,
      and is unlikely to be a bug in cargo-semver-checks
note: the following command can be used to reproduce the error:
      cargo new --lib example &&
          cd example &&
          echo '[workspace]' >> Cargo.toml &&
          cargo add --path /home/runner/work/datafusion/datafusion/datafusion/sqllogictest --features avro,backtrace,bytes,chrono,datafusion-substrait,parquet_encryption,postgres,postgres-types,substrait,testcontainers-modules,tokio-postgres &&
          cargo check &&
          cargo doc

error: aborting due to failure to build rustdoc for crate datafusion-proto v54.1.0

row_groups_pruned_dictionary was sorted after the page-index metrics
in EXPLAIN output; group it with the other row-group-level pruning
metrics (statistics, bloom filter) instead, and update the golden
sqllogictest output accordingly.

Also update the temporary Cargo.toml patch comment to point at
arrow-rs PR apache#10420, which supersedes the now-closed apache#9011.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions github-actions Bot added the physical-expr Changes to the physical-expr crates label Jul 23, 2026
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.51243% with 81 lines in your changes missing coverage. Please review.
✅ Project coverage is 80.71%. Comparing base (1c8295c) to head (7ea9dad).
⚠️ Report is 15 commits behind head on main.

Files with missing lines Patch % Lines
...fusion/datasource-parquet/src/dictionary_filter.rs 90.37% 28 Missing and 3 partials ⚠️
datafusion/datasource-parquet/src/opener/mod.rs 82.11% 20 Missing and 2 partials ⚠️
datafusion/proto-common/src/generated/pbjson.rs 0.00% 13 Missing ⚠️
datafusion/datasource-parquet/src/source.rs 33.33% 8 Missing ⚠️
...afusion/datasource-parquet/src/row_group_filter.rs 79.16% 5 Missing ⚠️
...tafusion/physical-expr-common/src/metrics/value.rs 88.23% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #23851      +/-   ##
==========================================
- Coverage   80.75%   80.71%   -0.04%     
==========================================
  Files        1089     1091       +2     
  Lines      368809   369903    +1094     
  Branches   368809   369903    +1094     
==========================================
+ Hits       297837   298574     +737     
- Misses      53217    53547     +330     
- Partials    17755    17782      +27     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

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

Labels

auto detected api change Auto detected API change common Related to common crate datasource Changes to the datasource crate documentation Improvements or additions to documentation physical-expr Changes to the physical-expr crates proto Related to proto crate sqllogictest SQL Logic Tests (.slt)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants