{"record":{"id":"dfc8459be08a296d","repo":"risingwavelabs/risingwave","slug":"database-is-required-for-snowflake-jdbc-sink","errorCode":null,"errorMessage":"database is required for Snowflake JDBC sink","messagePattern":"database is required for Snowflake JDBC sink","errorType":"validation","errorClass":"SinkError::Config","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/snowflake_redshift/snowflake.rs","lineNumber":591,"sourceCode":"        Ok(SinkCommitCoordinator::SinglePhase(Box::new(coordinator)))\n    }\n}\n\npub enum SnowflakeSinkWriter {\n    S3(SnowflakeRedshiftSinkS3Writer),\n    Jdbc(SnowflakeRedshiftSinkJdbcWriter),\n}\n\nimpl SnowflakeSinkWriter {\n    pub async fn new(\n        config: SnowflakeV2Config,\n        is_append_only: bool,\n        writer_param: SinkWriterParam,\n        param: SinkParam,\n    ) -> Result<Self> {\n        let schema = param.schema();\n        let database = config.snowflake_database.ok_or_else(|| {\n            SinkError::Config(anyhow!(\"database is required for Snowflake JDBC sink\"))\n        })?;\n        let schema_name = config.snowflake_schema.ok_or_else(|| {\n            SinkError::Config(anyhow!(\"schema is required for Snowflake JDBC sink\"))\n        })?;\n        let table_name = config.snowflake_target_table_name.ok_or_else(|| {\n            SinkError::Config(anyhow!(\"table.name is required for Snowflake JDBC sink\"))\n        })?;\n        if config.with_s3 {\n            let s3_writer = SnowflakeRedshiftSinkS3Writer::new(\n                config.s3_inner.ok_or_else(|| {\n                    SinkError::Config(anyhow!(\n                        \"S3 configuration is required for Snowflake S3 sink\"\n                    ))\n                })?,\n                schema,\n                is_append_only,\n                table_name,\n            )?;","sourceCodeStart":573,"sourceCodeEnd":609,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/snowflake_redshift/snowflake.rs#L573-L609","documentation":"In `SnowflakeSink::new`, the `snowflake_database` config field is required; when absent the constructor returns this Config error. The Snowflake JDBC sink needs the target database to qualify the schema, table, and stage objects it writes to.","triggerScenarios":"Creating a Snowflake sink whose WITH options omit `snowflake.database`, causing `config.snowflake_database` to be None in `new`.","commonSituations":"Copying a sink DDL example that only sets user/warehouse; renaming of options between versions; typos like `database` instead of `snowflake.database`.","solutions":["Add `snowflake.database = '<db>'` to the sink WITH options","Verify option spelling matches the connector's expected keys (`snowflake.database`)","Check the connector docs for the full required option set (database, schema, table.name)"],"exampleFix":"-- before\nWITH (connector='snowflake', snowflake.schema='public', snowflake.table.name='t', ...)\n-- after\nWITH (connector='snowflake', snowflake.database='MYDB', snowflake.schema='public', snowflake.table.name='t', ...)","handlingStrategy":"validation","validationCode":"let required = [\"snowflake.database\", \"snowflake.schema\", \"snowflake.table.name\"];\nfor k in required {\n    assert!(opts.contains_key(k), \"missing sink option: {k}\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use a config checklist for Snowflake sinks: database, schema, table.name","Copy from an up-to-date connector example rather than hand-writing options"],"tags":["snowflake","sink","config","jdbc"],"backgroundTag":"missing-required-config-field","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"}