AWS Athena中将字符串列转为JSON遇问题求助
解决AWS Athena字符串转JSON后的转义与属性访问问题
你的操作没完全错,但对Athena的JSON类型处理逻辑理解有偏差,问题出在这两点:
1. 转义符出现的原因
CAST(event AS JSON)并没有把字符串解析成结构化的JSON对象,只是给原字符串打上了JSON类型的标记,本质还是将原字符串包装成了JSON格式的字符串。比如原event列值是{"attribute": "value"},CAST后会变成"{\"attribute\": \"value\"}",自然会出现转义符。
2. 无法用.访问属性的原因
Athena中的JSON类型是一种特殊的字符串类型,不是结构化的ROW类型,所以直接用json_event.attribute的方式访问属性会触发TYPE_MISMATCH错误。
正确的处理方式
方式一:用json_parse解析成可结构化访问的JSON对象
这是最直接的解决办法,json_parse会真正把字符串解析成结构化的JSON对象,既不会产生转义符,也支持用.访问属性:
SELECT json_parse(event) AS json_event FROM your_table;
之后就可以直接通过json_event.attribute访问对应属性。
方式二:用JSON函数直接提取属性
如果不想修改类型转换逻辑,也可以用Athena提供的JSON函数直接从字符串或CAST后的JSON类型中提取属性:
-- 直接从原字符串列提取 SELECT json_extract_scalar(event, '$.attribute') AS attribute FROM your_table; -- 从CAST后的JSON类型列提取 SELECT json_extract_scalar(CAST(event AS JSON), '$.attribute') AS attribute FROM your_table;
内容的提问来源于stack exchange,提问作者vicky
相关产品推荐
相关产品推荐

