{"record":{"id":"870e58cef7a2da7c","repo":"risingwavelabs/risingwave","slug":"variant-is-not-supported-for-bigquery-sink","errorCode":null,"errorMessage":"VARIANT is not supported for BigQuery sink.","messagePattern":"VARIANT is not supported for BigQuery sink\\.","errorType":"validation","errorClass":"SinkError::BigQuery","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/big_query.rs","lineNumber":423,"sourceCode":"            DataType::Timestamp => Ok(\"DATETIME\".to_owned()),\n            DataType::Timestamptz => Ok(\"TIMESTAMP\".to_owned()),\n            DataType::Interval => Ok(\"INTERVAL\".to_owned()),\n            DataType::Struct(structs) => {\n                let mut elements_vec = vec![];\n                for (name, datatype) in structs.iter() {\n                    let element_string =\n                        Self::get_string_and_check_support_from_datatype(datatype)?;\n                    elements_vec.push(format!(\"{} {}\", name, element_string));\n                }\n                Ok(format!(\"STRUCT<{}>\", elements_vec.join(\", \")))\n            }\n            DataType::List(l) => {\n                let element_string = Self::get_string_and_check_support_from_datatype(l.elem())?;\n                Ok(format!(\"ARRAY<{}>\", element_string))\n            }\n            DataType::Bytea => Ok(\"BYTES\".to_owned()),\n            DataType::Jsonb => Ok(\"JSON\".to_owned()),\n            DataType::Variant => Err(SinkError::BigQuery(anyhow::anyhow!(\n                \"VARIANT is not supported for BigQuery sink.\"\n            ))),\n            DataType::Serial => Ok(\"INT64\".to_owned()),\n            DataType::Int256 => Err(SinkError::BigQuery(anyhow::anyhow!(\n                \"INT256 is not supported for BigQuery sink.\"\n            ))),\n            DataType::Map(_) => Err(SinkError::BigQuery(anyhow::anyhow!(\n                \"MAP is not supported for BigQuery sink.\"\n            ))),\n            DataType::Vector(_) => Err(SinkError::BigQuery(anyhow::anyhow!(\n                \"VECTOR is not supported for BigQuery sink.\"\n            ))),\n        }\n    }\n\n    fn map_field(rw_field: &Field) -> Result<TableFieldSchema> {\n        let tfs = match &rw_field.data_type {\n            DataType::Boolean => TableFieldSchema::bool(&rw_field.name),","sourceCodeStart":405,"sourceCodeEnd":441,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/big_query.rs#L405-L441","documentation":"RisingWave's VARIANT (semi-structured) type has no BigQuery counterpart in this connector's type mapping, so `get_string_and_check_support_from_datatype` rejects any sink schema containing a VARIANT column.","triggerScenarios":"Creating a BigQuery sink on a relation with a VARIANT column (e.g. from a Snowflake-compatible or JSON-ingested source); validation enumerates all fields and errors on the VARIANT one.","commonSituations":"Semi-structured payloads ingested as VARIANT being piped to BigQuery; users expecting automatic conversion to BigQuery JSON.","solutions":["Convert the VARIANT column to JSONB in the MV (CAST(col AS JSONB)) which maps to BigQuery JSON","Or extract the needed fields from the VARIANT into typed columns","Recreate the sink after the schema change"],"exampleFix":"-- before\nCREATE MATERIALIZED VIEW mv AS SELECT v FROM t; -- v is VARIANT\n-- after\nCREATE MATERIALIZED VIEW mv AS SELECT CAST(v AS JSONB) AS v FROM t;","handlingStrategy":"validation","validationCode":"SELECT column_name FROM information_schema.columns\nWHERE table_name = 'mv' AND udt_name = 'variant';\n-- must return zero rows before CREATE SINK","typeGuard":"fn sink_ready(field: &Field) -> bool { !matches!(field.data_type(), DataType::Variant) }","tryCatchPattern":"match get_string_and_check_support_from_datatype(&dt) {\n    Err(e) if e.to_string().contains(\"VARIANT is not supported\") => {\n        eprintln!(\"cast VARIANT to JSONB in the MV\");\n    }\n    _ => {}\n}","preventionTips":["Flatten VARIANT columns into typed fields before sinking","Use JSONB (maps to BigQuery JSON) for semi-structured data","Reject VARIANT in a pre-flight schema lint"],"tags":["bigquery","unsupported-type","schema"],"backgroundTag":"unsupported-dtype","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"}