risingwavelabs/risingwave · error
Invalid properties for iceberg source: {:?}
Error message
Invalid properties for iceberg source: {:?} What it means
`extract_iceberg_columns` returns an `anyhow!` error when a source's properties fail to deserialize into the expected Iceberg source property struct (catalog type, warehouse URI, database/table, etc.). The `else` branch fires when `props` cannot be interpreted as valid Iceberg catalog properties, so column binding from the remote Iceberg table is aborted.
Source
Thrown at src/frontend/src/handler/create_source/external_schema/iceberg.rs:60
field.name()
)
})?,
);
Ok(ColumnCatalog {
column_desc,
// hide the _row_id column for iceberg engine table
// This column is auto generated when users define a table without primary key
is_hidden: field.name() == ROW_ID_COLUMN_NAME,
})
})
.collect::<anyhow::Result<Vec<_>>>()?;
columns.extend(ColumnCatalog::iceberg_hidden_cols());
tracing::info!("iceberg columns: {:?}", columns);
Ok(columns)
} else {
Err(anyhow!(format!(
"Invalid properties for iceberg source: {:?}",
props
)))
}
}
View on GitHub (pinned to 6469eb736d)
Solutions
- Compare the printed props against the Iceberg source docs and add the missing required keys (`catalog.type`, `warehouse`, table identifiers).
- Fix typos/casing in WITH option names.
- Provide catalog credentials/storage options (e.g. s3.access_key, s3.secret_key, endpoint) if using S3-based catalogs.
- Test the same catalog config with a standalone Iceberg/Spark client to verify property validity.
Example fix
// before CREATE SOURCE s WITH (connector='iceberg', wh='s3://bucket/wh'); // after CREATE SOURCE s WITH (connector='iceberg', catalog.type='rest', warehouse='s3://bucket/wh', catalog.uri='https://rest:8181');
Defensive patterns
Strategy: validation
Validate before calling
// validate iceberg source properties before CREATE SOURCE
function validateIcebergProps(p) {
const required = ['catalog.type', 'warehouse'];
const missing = required.filter(k => !(k in p));
if (missing.length) throw new Error('missing iceberg props: ' + missing.join(','));
} Prevention
- Keep a canonical WITH-options template per catalog type (REST/Hive/Hadoop).
- Include storage credentials (s3 keys/endpoint) whenever the warehouse is on object storage.
- Re-test catalog options with a standalone Iceberg client after upgrading RisingWave.
When it happens
Trigger: `CREATE SOURCE ... WITH (connector = 'iceberg', ...)` where required properties (e.g. `catalog.type`, `warehouse`, database/table names) are missing, misnamed, or of wrong type, so the `FromStr` conversion of props fails before `bind_columns_from_source_for_non_cdc` proceeds.
Common situations: Typos in WITH options; missing `warehouse` or catalog credentials (S3 path/keys) required by the catalog config; REST vs Hadoop/Hive catalog property shapes mixed up; version changes to accepted property names.
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
- Invalid properties for ADBC Snowflake source: {:?}
- `warehouse.path` must be set
- Unsupported scheme: {}
- `catalog.type` must not be set when `hosted_catalog` is set
- `catalog.uri` must not be set when `hosted_catalog` is set
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/5e8ba330292951a4.
Report an issue: GitHub.