GCP BigQuery中如何将字典格式字符串转换为STRUCT类型
GCP BigQuery 字符串格式JSON字典转STRUCT方法
你可以通过「字符串解析为原生JSON类型 + 显式类型映射」的方式实现转换,针对你给出的示例场景,直接运行如下SQL即可得到STRUCT类型结果:
WITH sample_data AS ( SELECT '{"ID": "A", "QualifierID": "XYZ", "text": "Origin"}' AS dict_str ) SELECT CAST( PARSE_JSON(dict_str) AS STRUCT<ID STRING, QualifierID STRING, text STRING> ) AS converted_struct FROM sample_data
关键说明
- 核心逻辑分两步:首先用
PARSE_JSON函数把JSON格式的字符串解析为BigQuery原生支持的JSON类型,再通过CAST显式声明目标STRUCT的字段结构,直接完成类型转换。 - 如果待转换的字符串可能存在格式不合法的脏数据,把
PARSE_JSON替换为SAFE.PARSE_JSON即可,解析失败时会返回NULL,不会导致整个SQL任务报错中断。 - 定义STRUCT结构时,字段名必须和JSON字典里的键名完全一致,字段类型要和JSON里对应值的类型匹配:
- 字符串值对应
STRING类型 - 整数值对应
INT64类型 - 浮点值对应
FLOAT64类型 - 嵌套字典可以对应嵌套定义的STRUCT类型,数组对应
ARRAY类型
- 字符串值对应
- 如果你的BigQuery版本暂不支持原生JSON类型,可以手动提取每个字段组装STRUCT,示例写法如下:
WITH sample_data AS ( SELECT '{"ID": "A", "QualifierID": "XYZ", "text": "Origin"}' AS dict_str ) SELECT STRUCT( JSON_EXTRACT_SCALAR(dict_str, '$.ID') AS ID, JSON_EXTRACT_SCALAR(dict_str, '$.QualifierID') AS QualifierID, JSON_EXTRACT_SCALAR(dict_str, '$.text') AS text ) AS converted_struct FROM sample_data
- 转换完成后的STRUCT可以直接通过
结构体名.字段名的格式访问内部字段,和原生定义的STRUCT使用逻辑完全一致。
内容的提问来源于stack exchange,提问作者Manisekhar
相关产品推荐
相关产品推荐

