{"record":{"id":"5f82f2568f286e90","repo":"risingwavelabs/risingwave","slug":"remote-sink-only-supports-list-int16-int32-int64","errorCode":null,"errorMessage":"Remote sink only supports list<int16, int32, int64, float, double, varchar>, got {:?}: {:?}","messagePattern":"Remote sink only supports list<int16, int32, int64, float, double, varchar>, got (.+?): (.+?)","errorType":"validation","errorClass":"SinkError::Remote","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/remote.rs","lineNumber":216,"sourceCode":"                    | DataType::Int32\n                    | DataType::Int64\n                    | DataType::Float32\n                    | DataType::Float64\n                    | DataType::Boolean\n                    | DataType::Decimal\n                    | DataType::Timestamp\n                    | DataType::Timestamptz\n                    | DataType::Varchar\n                    | DataType::Date\n                    | DataType::Time\n                    | DataType::Interval\n                    | DataType::Jsonb\n                    | DataType::Bytea => Ok(()),\n            DataType::List(list) => {\n                if is_remote_es_sink(sink_name) || matches!(list.elem(), DataType::Int16 | DataType::Int32 | DataType::Int64 | DataType::Float32 | DataType::Float64 | DataType::Varchar){\n                    Ok(())\n                } else{\n                    Err(SinkError::Remote(anyhow!(\n                        \"Remote sink only supports list<int16, int32, int64, float, double, varchar>, got {:?}: {:?}\",\n                        col.name,\n                        col.data_type,\n                    )))\n                }\n            },\n            DataType::Struct(_) => {\n                if is_remote_es_sink(sink_name){\n                    Ok(())\n                }else{\n                    Err(SinkError::Remote(anyhow!(\n                        \"Only Es sink supports struct, got {:?}: {:?}\",\n                        col.name,\n                        col.data_type,\n                    )))\n                }\n            },\n            DataType::Vector(_) |","sourceCodeStart":198,"sourceCodeEnd":234,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/remote.rs#L198-L234","documentation":"Remote sinks restrict `List` columns: only Elasticsearch remote sinks accept any list, while other remote sinks accept lists whose element type is int16, int32, int64, float32, float64, or varchar. A list of any other element type (struct, timestamp, boolean, nested list, etc.) fails validation with this error naming the offending column and type.","triggerScenarios":"Create a remote (non-ES) sink whose schema includes `list<struct>`, `list<timestamp>`, `list<boolean>`, `list<date>`, or `list<list<int>>` columns.","commonSituations":"Users sink nested/complex data (arrays of structs from JSON sources) to remote sinks; schema evolution introduces a timestamp array; the FIXME comment shows struct/array support in stream sink is still unimplemented.","solutions":["Flatten or drop the unsupported list column in the sink query (e.g. cast elements or serialize to varchar JSON).","Cast list elements to a supported type (int16/int32/int64/float32/float64/varchar).","Use the Elasticsearch remote sink path if lists of arbitrary types must be passed through, or a different sink connector with native struct/array support."],"exampleFix":"// before\nCREATE SINK s FROM (SELECT tags, * FROM t) WITH (connector='remote', ...)  -- tags: list<struct>\n// after\nCREATE SINK s FROM (SELECT tags::varchar AS tags_json, * FROM t) WITH (connector='remote', ...)","handlingStrategy":"type-guard","validationCode":"const ELEM_OK = ['int16','int32','int64','float32','float64','varchar'];\nfor (const c of columns) if (c.type.startsWith('list<') && !ELEM_OK.some(t => c.type.includes(t))) throw new Error(`unsupported list column: ${c.name}`);","typeGuard":"const hasSupportedListElems = (c) => !c.type.startsWith('list<') || /list<\\s*(int16|int32|int64|float32|float64|varchar)/.test(c.type);","tryCatchPattern":"try { await createSink(cfg); } catch (e) { if (/only supports list</.test(String(e))) { dropOrCastColumn(cfg, parseColumnFromError(e)); await createSink(cfg); } else throw e; }","preventionTips":["Flatten or JSON-serialize nested/struct list columns before remote sinks","Check element types against the supported list during schema design","Track the upstream FIXME — struct/array support may land in later versions"],"tags":["sink","type-mismatch","unsupported-type"],"backgroundTag":"unsupported-dtype","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"}