{"record":{"id":"058b3099c2a27c8c","repo":"risingwavelabs/risingwave","slug":"compaction-write-parquet-max-row-group-rows-must","errorCode":null,"errorMessage":"`compaction.write_parquet_max_row_group_rows` must be greater than 0","messagePattern":"`compaction\\.write_parquet_max_row_group_rows` must be greater than 0","errorType":"validation","errorClass":"SinkError::Config","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/iceberg/config.rs","lineNumber":667,"sourceCode":"            return Err(SinkError::Config(anyhow!(\n                \"`compaction.small_files_threshold_mb` must be greater than 0\"\n            )));\n        }\n\n        if config.delete_files_count_threshold == Some(0) {\n            return Err(SinkError::Config(anyhow!(\n                \"`compaction.delete_files_count_threshold` must be greater than 0\"\n            )));\n        }\n\n        if config.target_file_size_mb == Some(0) {\n            return Err(SinkError::Config(anyhow!(\n                \"`compaction.target_file_size_mb` must be greater than 0\"\n            )));\n        }\n\n        if config.write_parquet_max_row_group_rows == Some(0) {\n            return Err(SinkError::Config(anyhow!(\n                \"`compaction.write_parquet_max_row_group_rows` must be greater than 0\"\n            )));\n        }\n\n        if config.write_parquet_max_row_group_bytes == Some(0) {\n            return Err(SinkError::Config(anyhow!(\n                \"`compaction.write_parquet_max_row_group_bytes` must be greater than 0\"\n            )));\n        }\n\n        if config.manifest_rewrite_target_size_bytes == Some(0) {\n            return Err(SinkError::Config(anyhow!(\n                \"`manifest_rewrite_target_size_bytes` must be greater than 0\"\n            )));\n        }\n\n        if config.manifest_rewrite_min_count_to_merge == Some(0) {\n            return Err(SinkError::Config(anyhow!(","sourceCodeStart":649,"sourceCodeEnd":685,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/iceberg/config.rs#L649-L685","documentation":"Raised when `write_parquet_max_row_group_rows` is Some(0). This option caps rows per Parquet row group and must be positive; zero would produce invalid/empty row groups and is rejected during config parsing.","triggerScenarios":"CREATE SINK with `compaction.write_parquet_max_row_group_rows = 0` in the WITH options.","commonSituations":"Zero placeholder in generated DDL; tuning attempts where the value was left unset in a variable; misunderstanding that 0 means 'no limit'.","solutions":["Set `write_parquet_max_row_group_rows` to a positive integer, e.g. 1000000.","Remove the option to use the default row group row cap."],"exampleFix":"// before\nWITH (connector = 'iceberg', write_parquet_max_row_group_rows = 0)\n// after\nWITH (connector = 'iceberg', write_parquet_max_row_group_rows = 1000000)","handlingStrategy":"validation","validationCode":"if (opts.write_parquet_max_row_group_rows != null && Number(opts.write_parquet_max_row_group_rows) <= 0) {\n  throw new Error('`compaction.write_parquet_max_row_group_rows` must be greater than 0');\n}","typeGuard":"function isValidOptionalPositive(v) {\n  return v == null || (Number.isInteger(v) && v > 0);\n}","tryCatchPattern":"try {\n  await createIcebergSink(opts);\n} catch (e) {\n  if (String(e).includes('write_parquet_max_row_group_rows')) {\n    delete opts.write_parquet_max_row_group_rows;\n    return createIcebergSink(opts);\n  }\n  throw e;\n}","preventionTips":["Use positive integers for Parquet writer limits.","Validate all write_parquet_* options before DDL submission.","Omit the option instead of using 0 as a placeholder."],"tags":["iceberg","sink","config-validation","parquet"],"backgroundTag":"invalid-config-value","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}