{"record":{"id":"c7aa48bdb65c2ade","repo":"apache/iceberg","slug":"skipping-column-statistics-config-for-missing-fiel","errorCode":null,"errorMessage":"Skipping column statistics config for missing field: {}","messagePattern":"Skipping column statistics config for missing field: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"parquet/src/main/java/org/apache/iceberg/parquet/Parquet.java","lineNumber":367,"sourceCode":"                String ndv = context.columnBloomFilterNdv().get(colPath);\n                if (ndv != null) {\n                  withBloomFilterNDV.accept(parquetColumnPath, Long.parseLong(ndv));\n                }\n              });\n    }\n\n    private void setColumnStatsConfig(\n        Context context,\n        Map<String, String> colNameToParquetPathMap,\n        BiConsumer<String, Boolean> withColumnStatsEnabled) {\n\n      context\n          .columnStatsEnabled()\n          .forEach(\n              (colPath, isEnabled) -> {\n                String parquetColumnPath = colNameToParquetPathMap.get(colPath);\n                if (parquetColumnPath == null) {\n                  LOG.warn(\"Skipping column statistics config for missing field: {}\", colPath);\n                  return;\n                }\n                withColumnStatsEnabled.accept(parquetColumnPath, Boolean.valueOf(isEnabled));\n              });\n    }\n\n    private void setDictionaryEncodingConfig(\n        Context context,\n        Map<String, String> colNameToParquetPathMap,\n        BiConsumer<String, Boolean> withDictionaryEncoding) {\n\n      context\n          .columnDictionaryEncodingEnabled()\n          .forEach(\n              (colPath, isEnabled) -> {\n                String parquetColumnPath = colNameToParquetPathMap.get(colPath);\n                if (parquetColumnPath == null) {\n                  LOG.warn(\"Skipping dictionary encoding config for missing field: {}\", colPath);","sourceCodeStart":349,"sourceCodeEnd":385,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/parquet/src/main/java/org/apache/iceberg/parquet/Parquet.java#L349-L385","documentation":"When building a Parquet writer, column-statistics collection was requested for a column path not present in the actual Parquet schema. The setting is skipped with a warning and the writer continues without stats for that column.","triggerScenarios":"Setting write.parquet.stats-enabled.column:<col>=true (or equivalent config) for a column that doesn't exist in the file's write schema — e.g. dropped column, schema evolution, or case mismatch.","commonSituations":"Per-column stats configs retained after columns were dropped/renamed; writing a narrower projection than the table schema where configs referenced projected-out columns.","solutions":["Remove or fix the stats-enabled config for the missing column path","Re-sync per-column properties with the current schema after evolution","Check path spelling and nested-path dot notation"],"exampleFix":"// before\n'write.parquet.stats-enabled.column':'old_col'='true'  // old_col no longer exists\n// after\nALTER TABLE t UNSET TBLPROPERTIES ('write.parquet.stats-enabled.column');","handlingStrategy":"validation","validationCode":"table.properties().stringPropertyNames().stream().filter(k -> k.startsWith(\"write.parquet.stats-enabled.column\")).forEach(k -> { String col = k.substring(k.lastIndexOf('.')+1); if (table.schema().findField(col) == null) { /* unset stale property */ } });","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Reconcile per-column stats properties with schema on every evolution","Treat per-column Parquet tuning properties as schema-coupled config","Unset properties for dropped columns"],"tags":["parquet","column-statistics","configuration"],"backgroundTag":"invalid-config-value","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}