{"record":{"id":"e2f6f299fd57a40b","repo":"risingwavelabs/risingwave","slug":"sink-format-unsupported","errorCode":null,"errorMessage":"sink format unsupported: {}","messagePattern":"sink format unsupported: (.+?)","errorType":"validation","errorClass":"SinkError::Config","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/catalog/mod.rs","lineNumber":237,"sourceCode":"}\n\nimpl TryFrom<PbSinkFormatDesc> for SinkFormatDesc {\n    type Error = SinkError;\n\n    fn try_from(value: PbSinkFormatDesc) -> Result<Self, Self::Error> {\n        use risingwave_pb::plan_common::{EncodeType as E, FormatType as F};\n\n        let format = match value.format() {\n            F::Plain => SinkFormat::AppendOnly,\n            F::Upsert => SinkFormat::Upsert,\n            F::Debezium => SinkFormat::Debezium,\n            f @ (F::Unspecified\n            | F::Native\n            | F::DebeziumMongo\n            | F::Maxwell\n            | F::Canal\n            | F::None) => {\n                return Err(SinkError::Config(anyhow!(\n                    \"sink format unsupported: {}\",\n                    f.as_str_name()\n                )));\n            }\n        };\n        let encode = match value.encode() {\n            E::Json => SinkEncode::Json,\n            E::Protobuf => SinkEncode::Protobuf,\n            E::Template => SinkEncode::Template,\n            E::Avro => SinkEncode::Avro,\n            E::Parquet => SinkEncode::Parquet,\n            E::Bytes => SinkEncode::Bytes,\n            e @ (E::Unspecified | E::Native | E::Csv | E::None | E::Text) => {\n                return Err(SinkError::Config(anyhow!(\n                    \"sink encode unsupported: {}\",\n                    e.as_str_name()\n                )));\n            }","sourceCodeStart":219,"sourceCodeEnd":255,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/catalog/mod.rs#L219-L255","documentation":"When converting a protobuf Sink plan descriptor into the catalog SinkFormat, formats like Unspecified, Native, DebeziumMongo, Maxwell, Canal, and None are not supported as sink formats. The try_from conversion rejects them with this config error.","triggerScenarios":"Submitting a CREATE SINK whose resolved format encodes to one of the unsupported enum variants (format left unspecified, or set to native/maxwell/canal/debezium-mongo/none).","commonSituations":"Omitting the format option so it defaults to Unspecified; copying CDC-source-only formats (maxwell, canal) into sink definitions.","solutions":["Explicitly set a supported sink format (e.g. format='append_only' or 'upsert', 'debezium').","Remove format values like 'native' or 'none' that are only valid for sources.","Inspect the generated sink plan to confirm the format field is populated."],"exampleFix":"// before\nWITH (connector='kafka', format='canal', encode='json', ...)\n// after\nWITH (connector='kafka', format='upsert', encode='json', ...)","handlingStrategy":"validation","validationCode":"const SINK_FORMATS = ['append_only', 'upsert', 'debezium'];\nif (!SINK_FORMATS.includes(props.format)) throw new Error(`Unsupported sink format: ${props.format}`);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never rely on an unspecified default format for sinks.","Do not reuse source-side format names (maxwell, canal, native) in sink DDL.","Keep sink DDL templates with explicit format values."],"tags":["sink","format","config","enum"],"backgroundTag":"unsupported-enum-value","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"}