apache/iceberg · warning
Skipping bloom filter config for missing field
Error message
Skipping bloom filter config for missing field: {} What it means
When building a Parquet writer, a bloom filter enablement was requested for a column path that does not exist in the actual Parquet schema being written. The config for that column is skipped with a warning instead of failing, and the writer proceeds without bloom filters for the missing field.
Solutions
- Remove or correct the bloom filter config for the non-existent column path
- Update the config after schema evolution so it references current columns
- Verify column path casing/segmentation matches the Iceberg schema (nested paths use dot notation)
Example fix
// before (table property)
'write.parquet.bloom-filter.enabled.column':'id' // column 'id' dropped from schema
// after
ALTER TABLE t UNSET TBLPROPERTIES ('write.parquet.bloom-filter.enabled.column'); Defensive patterns
Strategy: validation
Validate before calling
write.parquet.bloom-filter.enabled.column.<col> settings should reference columns verified against currentSchema().columns() before configuring the writer
Prevention
- Clean up per-column Parquet properties after schema evolution
- Validate property column paths against the table schema in CI
- Use exact Iceberg column paths (dot-separated for nested fields)
When it happens
Trigger: Setting table/config property write.parquet.bloom-filter.enabled.column:<col>=true for a column absent from the written schema (e.g. after schema evolution, dropped column, or case-sensitivity mismatch).
Common situations: Bloom filter configs set on a table whose write schema was narrowed; partition-column or identity-mapped columns not present in the data file schema; typo in the column path.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- Class was not found
- Failed to read required bloom filter for id
- Fallback ID assignment in Parquet is UNSAFE and will be…
- Skipping column statistics config for missing field
- Skipping dictionary encoding config for missing field
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/eea78f1cc97a366b.
Report an issue: GitHub.
Appendix: source
Thrown at parquet/src/main/java/org/apache/iceberg/parquet/Parquet.java:340
WriteBuilder createContextFunc(Function<Map<String, String>, Context> newCreateContextFunc) {
this.createContextFunc = newCreateContextFunc;
return this;
}
private void setBloomFilterConfig(
Context context,
Map<String, String> colNameToParquetPathMap,
BiConsumer<String, Boolean> withBloomFilterEnabled,
BiConsumer<String, Double> withBloomFilterFPP,
BiConsumer<String, Long> withBloomFilterNDV) {
context
.columnBloomFilterEnabled()
.forEach(
(colPath, isEnabled) -> {
String parquetColumnPath = colNameToParquetPathMap.get(colPath);
if (parquetColumnPath == null) {
LOG.warn("Skipping bloom filter config for missing field: {}", colPath);
return;
}
withBloomFilterEnabled.accept(parquetColumnPath, Boolean.valueOf(isEnabled));
String fpp = context.columnBloomFilterFpp().get(colPath);
if (fpp != null) {
withBloomFilterFPP.accept(parquetColumnPath, Double.parseDouble(fpp));
}
String ndv = context.columnBloomFilterNdv().get(colPath);
if (ndv != null) {
withBloomFilterNDV.accept(parquetColumnPath, Long.parseLong(ndv));
}
});
}
private void setColumnStatsConfig(
Context context,
Map<String, String> colNameToParquetPathMap,View on GitHub (pinned to 86d9c8fc54)