{"record":{"id":"a236c36e9b529718","repo":"risingwavelabs/risingwave","slug":"table-name-is-required-for-snowflake-jdbc-sink","errorCode":null,"errorMessage":"table.name is required for Snowflake JDBC sink","messagePattern":"table\\.name 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":597,"sourceCode":"    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(\n                is_append_only,\n                writer_param,\n                param,","sourceCodeStart":579,"sourceCodeEnd":615,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/snowflake_redshift/snowflake.rs#L579-L615","documentation":"Required-option guard in SnowflakeSinkWriter::new: `table.name` was not supplied in the Snowflake sink config, but the JDBC writer needs a fully qualified target table to write into. It fires at writer construction after the database and schema required-option checks.","triggerScenarios":"Creating a Snowflake sink whose WITH options lack `snowflake.table.name`, so `config.snowflake_target_table_name` is None in `new`.","commonSituations":"Setting `table.name` without the `snowflake.` prefix; relying on the sink name to be used as the table name (not supported); documentation/version drift in option names.","solutions":["Add `snowflake.table.name = '<table>'` to the sink WITH options","Confirm the exact option key (`snowflake.table.name`) from connector docs","Pre-create the target table in Snowflake and use the same name"],"exampleFix":"-- before\nWITH (connector='snowflake', snowflake.database='MYDB', snowflake.schema='PUBLIC', ...)\n-- after\nWITH (connector='snowflake', snowflake.database='MYDB', snowflake.schema='PUBLIC', snowflake.table.name='TARGET_T', ...)","handlingStrategy":"validation","validationCode":"assert!(opts.contains_key(\"snowflake.table.name\"), \"snowflake.table.name is required\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use the exact `snowflake.table.name` key, not `table` or `table.name`","Pre-create the target table and reference it by the same name"],"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"}