risingwavelabs/risingwave · error · SinkError::Remote
Remote sink only supports list<int16, int32, int64, float…
Error message
Remote sink only supports list<int16, int32, int64, float, double, varchar>, got {:?}: {:?} What it means
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.
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.
Example fix
// before CREATE SINK s FROM (SELECT tags, * FROM t) WITH (connector='remote', ...) -- tags: list<struct> // after CREATE SINK s FROM (SELECT tags::varchar AS tags_json, * FROM t) WITH (connector='remote', ...)
Defensive patterns
Strategy: type-guard
Validate before calling
const ELEM_OK = ['int16','int32','int64','float32','float64','varchar'];
for (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}`); Type guard
const hasSupportedListElems = (c) => !c.type.startsWith('list<') || /list<\s*(int16|int32|int64|float32|float64|varchar)/.test(c.type); Try / catch
try { await createSink(cfg); } catch (e) { if (/only supports list</.test(String(e))) { dropOrCastColumn(cfg, parseColumnFromError(e)); await createSink(cfg); } else throw e; } Prevention
- 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
When it happens
Trigger: Create a remote (non-ES) sink whose schema includes `list<struct>`, `list<timestamp>`, `list<boolean>`, `list<date>`, or `list<list<int>>` columns.
Common situations: 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.
Related errors
- Column ` ` in Postgres table ` ` has type ` `, but sink…
- column type mismatch
- is not supported in SQL Server
- Don't support Vector
- Dont support auto create table for datatype
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/5f82f2568f286e90.
Report an issue: GitHub.
Appendix: source
Thrown at src/connector/src/sink/remote.rs:216
| DataType::Int32
| DataType::Int64
| DataType::Float32
| DataType::Float64
| DataType::Boolean
| DataType::Decimal
| DataType::Timestamp
| DataType::Timestamptz
| DataType::Varchar
| DataType::Date
| DataType::Time
| DataType::Interval
| DataType::Jsonb
| DataType::Bytea => Ok(()),
DataType::List(list) => {
if is_remote_es_sink(sink_name) || matches!(list.elem(), DataType::Int16 | DataType::Int32 | DataType::Int64 | DataType::Float32 | DataType::Float64 | DataType::Varchar){
Ok(())
} else{
Err(SinkError::Remote(anyhow!(
"Remote sink only supports list<int16, int32, int64, float, double, varchar>, got {:?}: {:?}",
col.name,
col.data_type,
)))
}
},
DataType::Struct(_) => {
if is_remote_es_sink(sink_name){
Ok(())
}else{
Err(SinkError::Remote(anyhow!(
"Only Es sink supports struct, got {:?}: {:?}",
col.name,
col.data_type,
)))
}
},
DataType::Vector(_) |View on GitHub (pinned to 6469eb736d)