risingwavelabs/risingwave · error
Unsupported warehouse scheme: {}
Error message
Unsupported warehouse scheme: {} What it means
After successfully parsing the warehouse URL, `build_storage_catalog_config` matches the URL scheme against supported object stores (s3/s3a, azblob). Any other scheme hits the catch-all `scheme => bail!` arm, so the storage catalog only supports those backends.
Source
Thrown at src/connector/src/connector_common/iceberg/mod.rs:648
.enable_config_load(Some(self.enable_config_load()))
.build(),
),
"gs" | "gcs" => StorageCatalogConfig::Gcs(
storage_catalog::StorageCatalogGcsConfig::builder()
.warehouse(warehouse)
.credential(self.gcs_credential.clone())
.enable_config_load(Some(self.enable_config_load()))
.build(),
),
"azblob" => StorageCatalogConfig::Azblob(
storage_catalog::StorageCatalogAzblobConfig::builder()
.warehouse(warehouse)
.account_name(self.azblob_account_name.clone())
.account_key(self.azblob_account_key.clone())
.endpoint(self.azblob_endpoint_url.clone())
.build(),
),
scheme => bail!("Unsupported warehouse scheme: {}", scheme),
};
Ok(CatalogBuildPlan::Storage(config))
}
fn build_native_rest_catalog_props(&self) -> ConnectorResult<CatalogBuildPlan> {
let mut iceberg_configs = HashMap::new();
// check gcs credential or s3 access key and secret key
if let Some(gcs_credential) = &self.gcs_credential {
iceberg_configs.insert(GCS_CREDENTIALS_JSON.to_owned(), gcs_credential.clone());
} else {
if let Some(region) = &self.s3_region {
iceberg_configs.insert(S3_REGION.to_owned(), region.clone());
}
if let Some(endpoint) = &self.s3_endpoint {
iceberg_configs.insert(S3_ENDPOINT.to_owned(), endpoint.clone());
}View on GitHub (pinned to 6469eb736d)
Solutions
- Use a supported scheme: s3://, s3a://, or azblob-compatible URL.
- For GCS or other stores, switch to `catalog.type = 'rest'` (via an S3-compatible/GCS REST gateway) or a catalog type that supports the backend.
- Check for typos ('s3a' vs 's3aa').
Example fix
// before warehouse.path = 'gs://my-bucket/warehouse' // after warehouse.path = 's3://my-bucket/warehouse'
Defensive patterns
Strategy: validation
Validate before calling
const scheme = new URL(opts['warehouse.path']).protocol.replace(':','');
if (!['s3','s3a','azblob'].includes(scheme)) {
throw new Error(`Unsupported warehouse scheme: ${scheme}`);
} Try / catch
catch (e) { if (String(e).includes('Unsupported warehouse scheme')) { /* fall back to rest catalog or s3-compatible endpoint */ } else { throw e; } } Prevention
- Check scheme support (s3/s3a/azblob only) before choosing catalog.type='storage'.
- For GCS/Azure/other stores, plan for a REST catalog from the start.
- Avoid provider-specific schemes (gs://, oss://) copied from other tooling.
When it happens
Trigger: `warehouse.path` with schemes like 'gs://' (GCS), 'file://', 'oss://', or 'http://' while `catalog.type = 'storage'`.
Common situations: GCS users assuming storage-catalog parity with S3; local development attempts with file://; provider-specific schemes copied from other tools (oss, cos).
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- `warehouse.path` must be set in storage catalog
- Invalid warehouse path: {}
- support negative scale for arrow decimal
- `warehouse.path` must be set
- Unsupported scheme: {}
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/257433b16ca9bff7.
Report an issue: GitHub.