You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Athena调用regexp_extract()提取CloudWatch日志JSON返回空问题

AWS Athena regexp_extract提取JSON返回空结果的原因和解决方案

核心原因

  • Presto正则默认点号不匹配换行符:regexp_extract使用的正则规则中,.默认仅匹配非换行字符,若你的日志JSON存在内部换行,或者日志行末尾有不可见的换行符,.*会提前终止匹配,无法命中完整的JSON结构。
  • 锚定符$的干扰:若日志行末尾存在多余的空格、制表符等空白内容,$会要求匹配到行最末尾,导致原本可以命中的正则匹配失败。
  • 正则匹配的空格限制:你写的au.com.crecy.VP4CStatistics : 仅匹配固定数量的空格,若实际日志中类名和冒号之间有多个空格或者制表符,也会导致匹配失败。

解决方案

方案1:修正正则规则(推荐)

在正则开头添加单行模式标记(?s),让.可以匹配所有字符包括换行,同时用\s*匹配任意数量的空白字符,移除末尾的$避免空白干扰:

select regexp_extract(message, '(?s)au\.com\.crecy\.VP4CStatistics\s*:\s*(\{.*})', 1) AS json_payload
FROM "VP4C_Statistics_Catalog"."/aws/elasticbeanstalk/vp4c-prod/var/log/web.stdout.log"."all_log_streams" 
where message LIKE '%visio-publisher-for-confluence%'
order by time desc

如果需要直接解析JSON使用,可以嵌套json_parse函数将提取的字符串转为JSON类型:

select json_parse(regexp_extract(message, '(?s)au\.com\.crecy\.VP4CStatistics\s*:\s*(\{.*})', 1)) AS json_payload
FROM "VP4C_Statistics_Catalog"."/aws/elasticbeanstalk/vp4c-prod/var/log/web.stdout.log"."all_log_streams" 
where message LIKE '%visio-publisher-for-confluence%'
order by time desc

方案2:使用字符串拆分(更简单高效)

因为目标JSON固定在au.com.crecy.VP4CStatistics : 之后,可以直接用split_part拆分字符串,避开正则的各类规则坑:

select split_part(message, 'au.com.crecy.VP4CStatistics : ', 2) AS json_payload
FROM "VP4C_Statistics_Catalog"."/aws/elasticbeanstalk/vp4c-prod/var/log/web.stdout.log"."all_log_streams" 
where message LIKE '%visio-publisher-for-confluence%'
order by time desc

内容的提问来源于stack exchange,提问作者Andrew Tyson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:54:02