{"record":{"id":"6ed7c7e4cd9bb696","repo":"risingwavelabs/risingwave","slug":"int256-is-not-supported-for-bigquery-sink","errorCode":null,"errorMessage":"INT256 is not supported for BigQuery sink.","messagePattern":"INT256 is not supported for BigQuery sink\\.","errorType":"validation","errorClass":"SinkError::BigQuery","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/big_query.rs","lineNumber":427,"sourceCode":"                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),\n            DataType::Int16 | DataType::Int32 | DataType::Int64 | DataType::Serial => {\n                TableFieldSchema::integer(&rw_field.name)\n            }\n            DataType::Float32 => {","sourceCodeStart":409,"sourceCodeEnd":445,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/big_query.rs#L409-L445","documentation":"RisingWave's Int256 (arbitrary-precision 256-bit integer) exceeds what BigQuery's INT64/NUMERIC mappings cover, so the connector rejects any sink schema containing an Int256 column rather than truncating silently.","triggerScenarios":"Creating a BigQuery sink on a relation with an INT256 column (typically from EVM/blockchain data ingestion); validation fails in `get_string_and_check_support_from_datatype` on DataType::Int256.","commonSituations":"Blockchain analytics pipelines where uint256 values (balances, token amounts) are INT256 in RW.","solutions":["Cast the INT256 column to DECIMAL/NUMERIC in the MV (may lose precision for very large values)","Or cast to VARCHAR/STRING to preserve the full value, storing it as a BigQuery STRING","Or cast to BIGINT (INT64) only if values are known to fit in 64 bits"],"exampleFix":"-- before\nCREATE MATERIALIZED VIEW mv AS SELECT balance FROM eth_balances; -- INT256\n-- after\nCREATE MATERIALIZED VIEW mv AS SELECT CAST(balance AS VARCHAR) AS balance FROM eth_balances;","handlingStrategy":"validation","validationCode":"SELECT column_name FROM information_schema.columns\nWHERE table_name = 'mv' AND udt_name IN ('int256','uint256');\n-- must return zero rows before CREATE SINK","typeGuard":"fn sink_ready(field: &Field) -> bool { !matches!(field.data_type(), DataType::Int256) }","tryCatchPattern":"match get_string_and_check_support_from_datatype(&dt) {\n    Err(e) if e.to_string().contains(\"INT256 is not supported\") => {\n        eprintln!(\"cast INT256 to VARCHAR or DECIMAL in the MV\");\n    }\n    _ => {}\n}","preventionTips":["Store 256-bit values as STRING or NUMERIC columns intended for BigQuery","Cast INT256 to VARCHAR to preserve full precision","Reject Int256 in a pre-flight schema lint 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"}