Google BigQuery:依据A列值从B列JSON串提取对应数值生成C列
在Google BigQuery中提取对应字段的数值
方法一:利用JSON函数(推荐,更稳定)
你的Column B是类JSON结构,仅末尾多了个多余逗号,先清理格式再用JSON提取函数即可:
SELECT Column_A, Column_B, CAST( JSON_EXTRACT_SCALAR( REGEXP_REPLACE(Column_B, r',$', ''), -- 移除末尾多余的逗号,转为标准JSON CONCAT('$.', Column_A) ) AS FLOAT64 ) AS Column_C FROM `your_project.your_dataset.your_table`
- 先用
REGEXP_REPLACE修正Column B的格式,使其符合标准JSON要求 JSON_EXTRACT_SCALAR通过拼接$.+Column A的值作为JSON路径,提取对应字符串值- 最后用
CAST转为浮点型,匹配Column C的格式
方法二:基于字符串截取(按你的思路优化)
如果坚持用字符串截取方式,可利用STRPOS的第三个参数指定搜索起始位置,定位目标数值后的逗号位置再截取内容:
SELECT Column_A, Column_B, CAST( SUBSTR( Column_B, -- 计算数值起始位置:Column A的位置 + Column A长度 + 1(跳过冒号) STRPOS(Column_B, Column_A) + LENGTH(Column_A) + 1, -- 计算截取长度:下一个逗号的位置 - 数值起始位置 STRPOS(Column_B, ',', STRPOS(Column_B, Column_A) + LENGTH(Column_A) + 1) - (STRPOS(Column_B, Column_A) + LENGTH(Column_A) + 1) ) AS FLOAT64 ) AS Column_C FROM `your_project.your_dataset.your_table`
- 用
LENGTH(Column_A)替代固定的+5,适配不同长度的Column A值 STRPOS(Column_B, ',', 起始位置)从指定位置开始搜索下一个逗号,确定数值的结束位置
内容的提问来源于stack exchange,提问作者Emma McDermott
相关产品推荐
相关产品推荐

