{"record":{"id":"7cf30fc355cb7cd4","repo":"risingwavelabs/risingwave","slug":"the-value-type-is-not-supported","errorCode":null,"errorMessage":"The value type {} is not supported","messagePattern":"The value type (.+?) is not supported","errorType":"validation","errorClass":"SinkError","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/formatter/mod.rs","lineNumber":425,"sourceCode":"                    let value_template =\n                        b.format_desc.options.get(VALUE_FORMAT).ok_or_else(|| {\n                            SinkError::Config(anyhow!(\n                                \"Cannot find '{VALUE_FORMAT}',please set it.\"\n                            ))\n                        })?;\n                    let key_template = b.format_desc.options.get(KEY_FORMAT).ok_or_else(|| {\n                        SinkError::Config(anyhow!(\"Cannot find '{KEY_FORMAT}',please set it.\"))\n                    })?;\n\n                    Ok(TemplateEncoder::new_stream_value(\n                        b.schema,\n                        pk_indices,\n                        key_template.clone(),\n                        value_template.clone(),\n                    ))\n                }\n            },\n            _ => Err(SinkError::Config(anyhow!(\n                \"The value type {} is not supported\",\n                redis_value_type\n            ))),\n        }\n    }\n}\n\nstruct FormatterParams<'a> {\n    builder: EncoderParams<'a>,\n    pk_indices: Vec<usize>,\n}\n\n/// Each formatter shall be able to be built from parameters.\n///\n/// This is not part of `SinkFormatter` trait, because that is about how a formatter completes its\n/// own job as a self-contained unit, with a custom `new` asking for only necessary info; while this\n/// one is about how different formatters can be selected from a common SQL interface.\ntrait FormatterBuild: Sized {","sourceCodeStart":407,"sourceCodeEnd":443,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/formatter/mod.rs#L407-L443","documentation":"The Redis sink formatter in RisingWave only supports a fixed set of Redis value types (e.g. string, list, hash, sorted-set). When the sink's `redis_value_type` property parses to something outside that set, the builder returns this SinkError::Config so the sink fails fast instead of writing data in an undefined format.","triggerScenarios":"Creating a Redis sink with a `value.type` (redis_value_type) property spelled as a type the formatter does not match, e.g. a typo like `hashe`, `str`, or an entirely unimplemented type in the match arms of the redis formatter builder.","commonSituations":"Typo in the sink `value.type` option when running `CREATE SINK ... WITH (connector='redis', value.type='...')`; using a value type added to docs but not yet implemented in the connector code.","solutions":["Check the `value.type` property for typos and use one of the supported values (e.g. 'string', 'list', 'hash', 'sorted_set')","Consult the Redis sink docs in this repository version for the exact accepted value type strings","If the type should be supported, add a match arm implementing it in src/connector/src/sink/formatter/mod.rs"],"exampleFix":"// before\nCREATE SINK s FROM mv INTO redis WITH (connector='redis', value.type='hashe');\n// after\nCREATE SINK s FROM mv INTO redis WITH (connector='redis', value.type='hash');","handlingStrategy":"validation","validationCode":"const VALID: &[&str] = &[\"string\", \"list\", \"hash\", \"sorted_set\"];\nfn validate_value_type(t: &str) -> Result<(), String> {\n    if VALID.contains(&t) { Ok(()) } else { Err(format!(\"unsupported redis value.type: {t}; must be one of {VALID:?}\")) }\n}","typeGuard":"fn is_supported_value_type(t: &str) -> bool {\n    matches!(t, \"string\" | \"list\" | \"hash\" | \"sorted_set\")\n}","tryCatchPattern":null,"preventionTips":["Copy value.type values verbatim from the Redis sink docs for your RisingWave version","Validate sink WITH options with a dry run before creating production sinks","Add the accepted values to an internal config lint/checklist"],"tags":["redis","sink","config"],"backgroundTag":"invalid-enum-value","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}