AWS Athena日志整数time值提取及数值过滤报错解决方案
AWS Athena JSON日志数值比较报错的解决办法
问题根源
你用json_extract提取的time字段,哪怕原始JSON里是整数,提取后其实是字符串类型,直接做> 1000这种数值比较,自然会触发类型不匹配的错误。
可行解决方案
方法一:用
json_extract_scalar+CAST转换类型
先通过json_extract_scalar提取出纯字符串格式的time值,再转换成整数类型后做比较:SELECT json_extract_scalar(log_col, '$.request') AS request_url, CAST(json_extract_scalar(log_col, '$.time') AS INTEGER) AS request_time FROM your_log_table WHERE CAST(json_extract_scalar(log_col, '$.time') AS INTEGER) > 1000;方法二:先解析整个JSON再处理
用json_parse把整行日志解析成JSON结构体,再从中提取字段并转换类型:SELECT parsed_log.request AS request_url, CAST(parsed_log.time AS INTEGER) AS request_time FROM ( SELECT json_parse(log_col) AS parsed_log FROM your_log_table ) WHERE CAST(parsed_log.time AS INTEGER) > 1000;处理异常值的容错写法
如果日志里存在time不是整数的异常情况,用TRY_CAST替代CAST,避免查询直接失败:WHERE TRY_CAST(json_extract_scalar(log_col, '$.time') AS INTEGER) > 1000;
内容的提问来源于stack exchange,提问作者dev_pradeep
相关产品推荐
相关产品推荐

