Zoltán Borók-Nagy created IMPALA-15436:
------------------------------------------

             Summary: [DOCS] Document the Iceberg write.parquet.bloom-filter-* 
table properties
                 Key: IMPALA-15436
                 URL: https://issues.apache.org/jira/browse/IMPALA-15436
             Project: IMPALA
          Issue Type: Documentation
            Reporter: Zoltán Borók-Nagy
            Assignee: Zoltán Borók-Nagy


IMPALA-12700 makes Impala honor Iceberg's own Parquet Bloom filter properties 
when writing Parquet files for Iceberg tables (INSERT, CTAS, UPDATE, MERGE, 
OPTIMIZE). The "Iceberg table properties" list in 
docs/topics/impala_iceberg.xml (concept iceberg_table_properties) ends at 
write.parquet.dict-size-bytes. Add:

- write.parquet.bloom-filter-enabled.column.<col> — 'true' writes a Parquet 
Bloom filter for that column (Parquet tables only)
- write.parquet.bloom-filter-max-bytes — positive 32-bit integer, Iceberg 
default 1048576; an upper bound on the bitset, which Impala clamps to the 64 B 
.. 128 MiB range
- write.parquet.bloom-filter-ndv.column.<col> — positive integer, the expected 
number of distinct values used to size the filter. Without it Impala uses the 
column's NDV statistic; with neither, the filter gets max-bytes.
- write.parquet.bloom-filter-fpp.column.<col> — false positive probability, 0 < 
fpp < 1, default 0.01

Then explain:
- Impala validates the values in CREATE TABLE and ALTER TABLE SET 
TBLPROPERTIES. CREATE TABLE also rejects these properties when 
write.format.default is not PARQUET ("Parquet Bloom filter properties should be 
set only for parquet file format"); ALTER checks only the values.
- If another engine stored invalid values, writes still succeed and warn: 
"Ignoring invalid Iceberg Parquet Bloom filter properties: ...".
- The Impala-specific parquet.bloom.filter.columns property wins for a column 
set in both.
- Writing is still gated by the PARQUET_BLOOM_FILTER_WRITE query option: NEVER 
disables it, and the default IF_NO_DICT writes a filter only for row groups 
that aren't fully dictionary-encoded.

A short example helps: CREATE TABLE ... STORED AS ICEBERG 
TBLPROPERTIES('write.parquet.bloom-filter-enabled.column.id'='true','write.parquet.bloom-filter-ndv.column.id'='100000').

Pre-existing gap worth folding in, not caused by IMPALA-12700: Parquet Bloom 
filters have no documentation at all. There is no page for 
PARQUET_BLOOM_FILTER_WRITE or PARQUET_BLOOM_FILTERING, and 
parquet.bloom.filter.columns ("col1:1024,col2", sizes rounded up to a power of 
two within 64 B .. 128 MiB) is undocumented. Adding those pages,
with ditamap and keydef entries, gives the Iceberg properties something to link 
to.

The behavior is additive, so no incompatible-changes entry.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to