Skip to content

feat: honor per-column bloom-filter table properties in the Parquet writer - #379

Merged
JanKaul merged 2 commits into
JanKaul:mainfrom
cedricziel:feat/parquet-bloom-column-properties
Jul 29, 2026
Merged

feat: honor per-column bloom-filter table properties in the Parquet writer#379
JanKaul merged 2 commits into
JanKaul:mainfrom
cedricziel:feat/parquet-bloom-column-properties

Conversation

@cedricziel

Copy link
Copy Markdown
Contributor

Fixes #377.

store_parquet_partitioned built its WriterProperties inline with only compression set, so callers had no way to enable Parquet split-block bloom filters. This honors the standard Iceberg property write.parquet.bloom-filter-enabled.column.<name> = true|false per column (new WRITE_PARQUET_BLOOM_FILTER_ENABLED_COLUMN_PREFIX const in iceberg-rust-spec).

Table properties are already settable through the existing update_properties transaction op, so no API change is needed — set the property on a table and the next write picks it up. Unrelated properties are ignored; anything but "true" disables the filter for that column.

Includes a unit test (bloom_filter_properties_apply_per_column).

Context: SignalDB wants blooms on its materialized label columns for point-lookup pruning (cedricziel/signaldb#731).

…riter

store_parquet_partitioned built its WriterProperties inline with only
compression set, so callers had no way to enable Parquet split-block
bloom filters. Honor the standard Iceberg property
write.parquet.bloom-filter-enabled.column.<name> = true|false per
column; properties are already reachable through the existing
update_properties transaction op, so no API change is needed.

Fixes JanKaul#377.

@JanKaul JanKaul left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Thanks for the PR. Generally looks good to me, I left 2 smaller comments

Comment thread iceberg-rust/src/arrow/write.rs Outdated
Comment thread iceberg-rust/src/arrow/write.rs Outdated
ColumnPath::from(&str) wraps the whole string as a single path segment,
so nested columns like my_struct.label_env silently never matched. Split
on '.' into path parts instead, and accept the enabled value
case-insensitively.

Addresses review feedback on JanKaul#379.
@cedricziel
cedricziel requested a review from JanKaul July 29, 2026 08:11
@JanKaul
JanKaul merged commit 96f28c1 into JanKaul:main Jul 29, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

write_parquet_partitioned hardcodes WriterProperties — no way to enable per-column Parquet bloom filters

2 participants