{"record":{"id":"16985f1a172891cc","repo":"risingwavelabs/risingwave","slug":"real-is-not-supported-for-bigquery-sink-please-co","errorCode":null,"errorMessage":"REAL is not supported for BigQuery sink. Please convert to FLOAT64 or other supported types.","messagePattern":"REAL is not supported for BigQuery sink\\. Please convert to FLOAT64 or other supported types\\.","errorType":"validation","errorClass":"SinkError::BigQuery","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/big_query.rs","lineNumber":397,"sourceCode":"            if !Self::is_data_type_compatible(&i.data_type, value)? {\n                return Err(SinkError::BigQuery(anyhow::anyhow!(\n                    \"Data type mismatch for column `{:?}`. BigQuery side: `{:?}`, RisingWave side: `{:?}`. \",\n                    i.name,\n                    value,\n                    data_type_string\n                )));\n            };\n        }\n        Ok(())\n    }\n\n    fn get_string_and_check_support_from_datatype(rw_data_type: &DataType) -> Result<String> {\n        match rw_data_type {\n            DataType::Boolean => Ok(\"BOOL\".to_owned()),\n            DataType::Int16 => Ok(\"INT64\".to_owned()),\n            DataType::Int32 => Ok(\"INT64\".to_owned()),\n            DataType::Int64 => Ok(\"INT64\".to_owned()),\n            DataType::Float32 => Err(SinkError::BigQuery(anyhow::anyhow!(\n                \"REAL is not supported for BigQuery sink. Please convert to FLOAT64 or other supported types.\"\n            ))),\n            DataType::Float64 => Ok(\"FLOAT64\".to_owned()),\n            DataType::Decimal => Ok(\"NUMERIC\".to_owned()),\n            DataType::Date => Ok(\"DATE\".to_owned()),\n            DataType::Varchar => Ok(\"STRING\".to_owned()),\n            DataType::Time => Ok(\"TIME\".to_owned()),\n            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(\", \")))","sourceCodeStart":379,"sourceCodeEnd":415,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/big_query.rs#L379-L415","documentation":"The BigQuery sink does not map RisingWave's 32-bit Float32 (SQL REAL) to any BigQuery type — BigQuery has no REAL type and the connector deliberately refuses rather than silently widening. Any sink schema containing a REAL/Float32 column fails validation.","triggerScenarios":"Creating a BigQuery sink whose source relation has a `REAL` / `FLOAT4` / `FLOAT32` column; validation calls `get_string_and_check_support_from_datatype` which errors on DataType::Float32.","commonSituations":"Legacy tables using REAL columns; ports from Postgres schemas where REAL is common.","solutions":["Change the column to DOUBLE PRECISION / FLOAT64 on the RisingWave side before sinking","Or wrap the column in the MV: CAST(col AS DOUBLE PRECISION) AS col","Recreate the sink after the type change"],"exampleFix":"-- before\nCREATE MATERIALIZED VIEW mv AS SELECT r FROM t; -- r is REAL\n-- after\nCREATE MATERIALIZED VIEW mv AS SELECT CAST(r AS DOUBLE PRECISION) AS r FROM t;","handlingStrategy":"validation","validationCode":"SELECT column_name FROM information_schema.columns\nWHERE table_name = 'mv' AND udt_name IN ('real','float4');\n-- must return zero rows before CREATE SINK","typeGuard":"fn sink_ready(field: &Field) -> bool { !matches!(field.data_type(), DataType::Float32) }","tryCatchPattern":"match get_string_and_check_support_from_datatype(&dt) {\n    Err(e) if e.to_string().contains(\"REAL is not supported\") => {\n        eprintln!(\"cast REAL columns to DOUBLE PRECISION in the MV\");\n    }\n    _ => {}\n}","preventionTips":["Use DOUBLE PRECISION instead of REAL in sink source schemas","Grep MV DDL for REAL/FLOAT4 before creating the sink","Add a pre-flight schema lint that rejects Float32 for BigQuery sinks"],"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"}