risingwavelabs/risingwave · error
`warehouse.path` must be set in glue catalog
Error message
`warehouse.path` must be set in glue catalog
What it means
Configuration validation error raised while building AWS Glue catalog config for an Iceberg sink/source: the glue catalog requires a `warehouse.path` property (the S3 warehouse location where Iceberg tables are stored) and it was absent from the user's with-clause options. Without it the catalog cannot resolve table locations.
Source
Thrown at src/connector/src/connector_common/iceberg/mod.rs:751
}
if let Some(access_key) = &self.s3_access_key {
iceberg_configs.insert(S3_ACCESS_KEY_ID.to_owned(), access_key.clone());
}
if let Some(secret_key) = &self.s3_secret_key {
iceberg_configs.insert(S3_SECRET_ACCESS_KEY.to_owned(), secret_key.clone());
}
if let Some(role_arn) = &self.s3_iam_role_arn {
iceberg_configs.insert(S3_ASSUME_ROLE_ARN.to_owned(), role_arn.clone());
}
iceberg_configs.insert(
S3_PATH_STYLE_ACCESS.to_owned(),
self.effective_s3_path_style_access().to_string(),
);
iceberg_configs.insert(
iceberg_catalog_glue::GLUE_CATALOG_PROP_WAREHOUSE.to_owned(),
self.warehouse_path
.clone()
.ok_or_else(|| anyhow!("`warehouse.path` must be set in glue catalog"))?,
);
if let Some(uri) = self.catalog_uri.as_deref() {
iceberg_configs.insert(
iceberg_catalog_glue::GLUE_CATALOG_PROP_URI.to_owned(),
uri.to_owned(),
);
}
Ok(CatalogBuildPlan::NativeGlue(iceberg_configs))
}
/// For both V1 and V2.
fn build_jni_catalog_configs(
&self,
catalog_impl: JniCatalogImpl,
java_catalog_props: &HashMap<String, String>,
) -> ConnectorResult<(HashMap<String, String>, HashMap<String, String>)> {
let mut iceberg_configs = HashMap::new();View on GitHub (pinned to 6469eb736d)
Solutions
- Add `warehouse.path` (e.g. 's3://bucket/warehouse') to the with-options.
- Ensure it matches the S3 bucket/region configured for Glue databases.
- Verify other Glue props (s3.region, credentials) are set alongside it.
Example fix
// before with ( connector='iceberg', catalog.type='glue', s3.region='us-east-1' ) // after with ( connector='iceberg', catalog.type='glue', s3.region='us-east-1', warehouse.path='s3://my-bucket/warehouse' )
Defensive patterns
Strategy: validation
Validate before calling
if (catalogType === 'glue' && !opts['warehouse.path']) {
throw new Error("`warehouse.path` must be set in glue catalog");
} Try / catch
catch (e) { if (String(e).includes('glue catalog')) { /* ask for warehouse.path and resubmit */ } else { throw e; } } Prevention
- Always pair catalog.type='glue' with warehouse.path, s3.region, and credentials.
- Keep a per-catalog required-options template for DDL generation.
- Document warehouse location alongside Glue database setup.
When it happens
Trigger: Creating an Iceberg sink/source with `catalog.type = 'glue'` without a `warehouse.path` with-option.
Common situations: Assuming Glue infers the warehouse (iceberg-java may not require it); config copied from a Hive-catalog setup; omitted during migration to Glue.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- `warehouse.path` must be set in storage catalog
- support negative scale for arrow decimal
- `warehouse.path` must be set
- Unsupported scheme: {}
- `enable_config_load` can't be enabled in this environment
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/0a3408d864a7ef6a.
Report an issue: GitHub.