如何在AWS Athena中解析含转义字符的JSON列并提取Message字段
提取失败原因
- 核心逻辑问题:
return字段对应的值不是嵌套JSON对象,而是转义后的JSON字符串,json_extract_scalar无法直接对字符串类型的字段值做二次JSON路径提取,因此直接写$return.Message会返回空值。 - 数据质量问题:你提供的样本数据中,
callparameters列存在多段独立JSON拼接的异常情况,如果生产数据也是该格式,需要先清洗提取出第一段包含return结构的合法JSON,再做解析。
可行解决代码
场景1:callparameters 列本身为合法JSON
仅需做两层JSON解析即可,先提取return字段的字符串内容,再对该字符串做二次JSON路径匹配:
CAST( json_extract_scalar( json_extract_scalar(callparameters, '$.return'), '$.Message' ) AS VARCHAR ) AS Message
场景2:callparameters 列存在多段JSON拼接的脏数据
先用正则提取第一段合法JSON,再做两层解析:
WITH clean_data AS ( SELECT -- 匹配开头第一个完整的JSON结构 regexp_extract(callparameters, '^\\{.*?\\}(?=\\s*\\{)', 0) AS valid_json FROM 你的表名 ) SELECT CAST( json_extract_scalar( json_extract_scalar(valid_json, '$.return'), '$.Message' ) AS VARCHAR ) AS Message FROM clean_data
内容的提问来源于stack exchange,提问作者OGZ
相关产品推荐
相关产品推荐

