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

AWS Log Insights中字符串转数字及时间差计算问题

问题描述

我的日志是JSON格式,包含MessageTemplate字段,示例内容如下:

"[Statistics] | 1697041097288531000 | 1697041097406589000 | 1697041097458528733"

我想在AWS Log Insights中提取其中两个数值并计算差值,尝试了以下查询语句,但elaspedTime列始终为空。用硬编码数值计算时可以正常得到结果,想知道怎么把提取的字符串转为数字完成计算,这个需求是否可行?

原查询语句:

fields @timestamp, @message
| filter @message like /[Statistics]/
| parse MessageTemplate "*|*|*|*" as header, pub1, pub2, pub3
| stats abs(pub2) - abs(pub1) as elaspedTime by @timestamp
| limit 20
解决方案

这个需求完全可行,问题出在两个细节上:

  1. Parse分隔符没处理空格:你的MessageTemplate里的分隔是|(前后带空格),但原查询用*|*提取时,会把空格包含到pub1、pub2这些变量里(比如pub1实际是" 1697041097288531000 "),带空格的字符串没法直接参与数值计算。
  2. 未显式转换字符串为数字:就算提取到纯数字字符串,最好用to_number()函数显式转成数值类型,避免类型识别问题。

修正后的查询语句:

fields @timestamp, @message
| filter @message like /[Statistics]/
| parse MessageTemplate "* | * | * | *" as header, pub1, pub2, pub3
| stats abs(to_number(pub2)) - abs(to_number(pub1)) as elapsedTime by @timestamp
| limit 20

补充说明:

  • 把parse的分隔符改成* | *,匹配带空格的分隔符,提取到无空格的数字字符串
  • to_number()会把字符串转为数值类型,之后就能正常做减法计算
  • 顺便修正了拼写错误:elaspedTime改成elapsedTime(不影响功能,但更规范)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:02:11