{"record":{"id":"68fa6548a6f8cba7","repo":"risingwavelabs/risingwave","slug":"type-is-not-supported-for-deltalake-sink","errorCode":null,"errorMessage":"Type {:?} is not supported for DeltaLake sink.","messagePattern":"Type (.+?) is not supported for DeltaLake sink\\.","errorType":"validation","errorClass":"SinkError","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/deltalake.rs","lineNumber":366,"sourceCode":"                {\n                    result = check_field_type(rw_type, dl_field.data_type())?\n                        && result\n                        && rw_name.eq(dl_field.name());\n                }\n                result\n            } else {\n                false\n            }\n        }\n        DataType::List(rw_list) => {\n            if let DeltaLakeDataType::Array(dl_list) = dl_data_type {\n                check_field_type(rw_list.elem(), dl_list.element_type())?\n            } else {\n                false\n            }\n        }\n        _ => {\n            return Err(SinkError::DeltaLake(anyhow!(\n                \"Type {:?} is not supported for DeltaLake sink.\",\n                rw_data_type.to_owned()\n            )));\n        }\n    };\n    Ok(result)\n}\n\nimpl Sink for DeltaLakeSink {\n    type LogSinker = CoordinatedLogSinker<DeltaLakeSinkWriter>;\n\n    const SINK_NAME: &'static str = DELTALAKE_SINK;\n\n    crate::impl_validate_sink_unknown_fields!();\n\n    fn is_exactly_once(properties: &BTreeMap<String, String>) -> Result<bool> {\n        let Some(value) = properties.get(\"is_exactly_once\") else {\n            return Ok(false);","sourceCodeStart":348,"sourceCodeEnd":384,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/deltalake.rs#L348-L384","documentation":"`check_field_type` recursively compares RisingWave column types against the DeltaLake table schema. The match is implemented as an exhaustive match on `rw_data_type`, and any RisingWave data type that DeltaLake does not support (no matching arm) produces this DeltaLake error during sink validation.","triggerScenarios":"`CREATE SINK ... INTO deltalake` where the sink schema (or a nested struct/list field) contains a type not handled by check_field_type, e.g. map, interval, or other unsupported data types.","commonSituations":"Sinking a table with Map or Interval columns; nested struct containing an unsupported leaf type; upstream schema evolved to add an unsupported column after the sink was validated.","solutions":["Remove or transform unsupported columns before sinking (e.g. cast to supported types like VARCHAR)","Restructure the schema so nested fields only use supported types","Check RisingWave DeltaLake sink docs for the supported type list","Create a dedicated sink table/materialized view with only supported columns"],"exampleFix":"// before\nCREATE SINK s FROM mv (INCLUDE map_col)\n// after\nCREATE SINK s FROM (SELECT map_col::VARCHAR AS map_col_str FROM mv)","handlingStrategy":"validation","validationCode":"fn assert_deltalake_supported(types: &[DataType]) -> Result<(), String> {\n    const SUPPORTED: [DataType; 5] = [DataType::Boolean, DataType::Int32, DataType::Int64, DataType::Float64, DataType::Varchar];\n    for t in types {\n        if !SUPPORTED.contains(t) {\n            return Err(format!(\"type {:?} not supported by DeltaLake sink\", t));\n        }\n    }\n    Ok(())\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Consult the RisingWave DeltaLake type-mapping docs before designing sink tables","Cast unsupported columns (map, interval) to supported types in a materialized view first","Avoid exotic nested types in tables destined for DeltaLake sinks"],"tags":["deltalake","schema","type-mismatch","validation"],"backgroundTag":"unsupported-operation","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"}