risingwavelabs/risingwave · error · SinkError::Config
S3 configuration is required for Snowflake S3 sink
Error message
S3 configuration is required for Snowflake S3 sink
What it means
When the Snowflake sink is configured with `with_s3 = true` (S3-stage based loading), the parsed S3 inner configuration must be present. `new` returns this Config error if the S3 options are missing or failed to parse into `s3_inner`.
Solutions
- Provide the S3 configuration options required by the Snowflake S3 sink (bucket, region, AWS credentials) alongside S3 mode
- Or disable S3 mode to use the pure JDBC writer path
- Verify the S3 config parsed correctly (correct option names and values)
Example fix
-- before
WITH (connector='snowflake', snowflake.s3=true, ...)
-- after
WITH (connector='snowflake', snowflake.s3=true,
s3.bucket.name='my-bucket', s3.region='us-east-1',
aws.credentials.access_key_id='...', aws.credentials.secret_access_key='...', ...) Defensive patterns
Strategy: validation
Validate before calling
if opts.get("snowflake.s3").map_or(false, |v| v == "true") {
assert!(opts.contains_key("s3.bucket.name"), "S3 options required for snowflake S3 sink");
} Prevention
- When enabling S3 mode, supply the full S3 option set at once
- Test the sink in a dev environment before production
When it happens
Trigger: Creating a Snowflake sink with S3 mode enabled (`with_s3`) but without valid S3 options (bucket, region/path, credentials), so `config.s3_inner` is None in `new`.
Common situations: Enabling S3 mode but forgetting s3 bucket/region/credentials options; malformed S3 config values that failed parsing earlier; mixing JDBC-direct and S3 modes inconsistently.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- snowflake.stage is required for S3 writer
- stage is required
- ambiguous auth: multiple auth options provided; remove one…
- auth.method=key_pair_object must not set `password`
- database is required
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/62d7cc91ba57aa2b.
Report an issue: GitHub.
Appendix: source
Thrown at src/connector/src/sink/snowflake_redshift/snowflake.rs:602
config: SnowflakeV2Config,
is_append_only: bool,
writer_param: SinkWriterParam,
param: SinkParam,
) -> Result<Self> {
let schema = param.schema();
let database = config.snowflake_database.ok_or_else(|| {
SinkError::Config(anyhow!("database is required for Snowflake JDBC sink"))
})?;
let schema_name = config.snowflake_schema.ok_or_else(|| {
SinkError::Config(anyhow!("schema is required for Snowflake JDBC sink"))
})?;
let table_name = config.snowflake_target_table_name.ok_or_else(|| {
SinkError::Config(anyhow!("table.name is required for Snowflake JDBC sink"))
})?;
if config.with_s3 {
let s3_writer = SnowflakeRedshiftSinkS3Writer::new(
config.s3_inner.ok_or_else(|| {
SinkError::Config(anyhow!(
"S3 configuration is required for Snowflake S3 sink"
))
})?,
schema,
is_append_only,
table_name,
)?;
Ok(Self::S3(s3_writer))
} else {
let jdbc_writer = SnowflakeRedshiftSinkJdbcWriter::new(
is_append_only,
writer_param,
param,
build_full_table_name(&database, &schema_name, &table_name),
)
.await?;
Ok(Self::Jdbc(jdbc_writer))
}View on GitHub (pinned to 6469eb736d)