{"record":{"id":"d10f269bb4858c9f","repo":"risingwavelabs/risingwave","slug":"snowflake-catalog-only-supports-iceberg-sources","errorCode":null,"errorMessage":"Snowflake catalog only supports iceberg sources","messagePattern":"Snowflake catalog only supports iceberg sources","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/iceberg/mod.rs","lineNumber":230,"sourceCode":"    const SINK_NAME: &'static str = ICEBERG_SINK;\n\n    crate::impl_validate_sink_unknown_fields!();\n\n    fn is_exactly_once(properties: &BTreeMap<String, String>) -> Result<bool> {\n        let Some(value) = properties.get(\"is_exactly_once\") else {\n            return Ok(true);\n        };\n        value.parse::<bool>().map_err(|_| {\n            SinkError::Config(anyhow!(\n                \"invalid value for `is_exactly_once`: expected `true` or `false`, got `{value}`\"\n            ))\n        })\n    }\n\n    async fn validate(&self) -> Result<()> {\n        let catalog_kind = self.config.catalog_kind()?;\n        if matches!(catalog_kind, IcebergCatalogKind::Snowflake) {\n            bail!(\"Snowflake catalog only supports iceberg sources\");\n        }\n\n        if matches!(catalog_kind, IcebergCatalogKind::Glue(_)) {\n            risingwave_common::license::Feature::IcebergSinkWithGlue\n                .check_available()\n                .map_err(|e| anyhow::anyhow!(e))?;\n        }\n\n        // Enforce merge-on-read for append-only tables\n        IcebergConfig::validate_append_only_write_mode(\n            &self.config.r#type,\n            self.config.write_mode,\n        )?;\n        validate_explicit_compaction_type(&self.config)?;\n        validate_compaction_option_compatibility(&self.config)?;\n\n        // VARIANT is not comparable, so it can never be an equality-delete key.\n        if self.config.r#type == SINK_TYPE_UPSERT","sourceCodeStart":212,"sourceCodeEnd":248,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/iceberg/mod.rs#L212-L248","documentation":"Iceberg sink validation rejects the Snowflake catalog kind because this sink path is only wired for storage-backed catalogs that the sink connector can write to (e.g. Glue, JDBC, REST, storage catalogs). Snowflake catalogs are supported on the Iceberg source side only, so a sink configured with a Snowflake catalog fails validation.","triggerScenarios":"Creating an Iceberg sink whose catalog config resolves `catalog_kind()` to `IcebergCatalogKind::Snowflake` (e.g. `catalog.type = 'snowflake'` or a Snowflake-flavored catalog URI).","commonSituations":"Reusing a working Snowflake Iceberg source catalog config for a sink; assuming source-side Snowflake catalog support implies sink-side support; a version change that flipped catalog support.","solutions":["Use a supported sink catalog (e.g. Glue, JDBC/Postgres, REST/Hive, or storage catalog) in the sink's catalog config.","Keep the Snowflake catalog for Iceberg sources only, and maintain a separate sink catalog config.","Check the RisingWave docs/release notes for whether sink-side Snowflake catalog support has been added since your version."],"exampleFix":"-- before\nWITH (connector='iceberg', catalog.type='snowflake', ...)\n-- after\nWITH (connector='iceberg', catalog.type='glue', catalog.warehouse='s3://bucket/path', ...)","handlingStrategy":"validation","validationCode":"-- pre-check catalog type before creating an iceberg sink\nSELECT CASE\n  WHEN properties ->> 'catalog.type' = 'snowflake'\n  THEN 'ERROR: snowflake catalog not supported for iceberg sinks'\n  ELSE 'ok'\nEND FROM rw_sinks;","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Maintain separate catalog configs for iceberg sources (snowflake ok) vs sinks (glue/jdbc/rest/storage).","Check current release notes for which sink catalog kinds are supported.","Validate sink DDL with a small test sink before production rollout."],"tags":["iceberg","sink","catalog","snowflake","unsupported"],"backgroundTag":"incompatible-source-type","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}