{"record":{"id":"759f4fd733936403","repo":"risingwavelabs/risingwave","slug":"schema-is-required-for-snowflake-jdbc-sink","errorCode":null,"errorMessage":"schema is required for Snowflake JDBC sink","messagePattern":"schema 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":594,"sourceCode":"\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            )?;\n            Ok(Self::S3(s3_writer))\n        } else {\n            let jdbc_writer = SnowflakeRedshiftSinkJdbcWriter::new(","sourceCodeStart":576,"sourceCodeEnd":612,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/snowflake_redshift/snowflake.rs#L576-L612","documentation":"`SnowflakeSink::new` requires `snowflake_schema` from the sink config; when it is None this Config error is returned. The schema (Snowflake namespace) is needed to locate the target table, stage, and pipe objects.","triggerScenarios":"Creating a Snowflake JDBC or S3 sink without the `snowflake.schema` WITH option, so `config.snowflake_schema` is None in `new`.","commonSituations":"Omitting the schema assuming the user's default schema applies; confusing RisingWave's internal schema with the Snowflake schema option; typos in the option name.","solutions":["Add `snowflake.schema = '<schema>'` to the sink WITH options","Ensure you are not confusing the RisingWave schema with `snowflake.schema` (the Snowflake namespace)","Validate all required Snowflake options: database, schema, table.name"],"exampleFix":"-- before\nWITH (connector='snowflake', snowflake.database='MYDB', snowflake.table.name='t', ...)\n-- after\nWITH (connector='snowflake', snowflake.database='MYDB', snowflake.schema='PUBLIC', snowflake.table.name='t', ...)","handlingStrategy":"validation","validationCode":"assert!(opts.contains_key(\"snowflake.schema\"), \"snowflake.schema is required\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set snowflake.schema explicitly; do not rely on Snowflake defaults","Distinguish RisingWave schema from the snowflake.schema option"],"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"}