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

如何使用NRQL统计单条日志中指定ID的出现次数?

统计JSON数组中指定ID的出现次数方法

当然可以实现,具体分两种场景处理:

一、日志查询引擎支持JSON解析(推荐)

如果用的是BigQuery、Splunk、Elasticsearch这类支持JSON字段处理的日志系统,直接解析数组再统计是最准确的方式:

步骤逻辑

  1. 把my.failures字段解析为JSON数组
  2. 将数组拆分成单行记录(每条数组元素对应一行)
  3. 过滤出id等于"one"的条目,最后统计总数

各引擎示例

  • BigQuery:
SELECT COUNT(*) AS total_one_count
FROM Log,
UNNEST(JSON_EXTRACT_ARRAY(my.failures)) AS failure
WHERE JSON_VALUE(failure, '$.id') = 'one'
  • Splunk:
| from Log
| spath input=my.failures output=failure path={}
| mvexpand failure
| spath input=failure output=id path=id
| search id="one"
| stats count AS total_one_count
  • Elasticsearch:
{
  "query": {
    "match": {
      "my.failures.id": "one"
    }
  },
  "aggs": {
    "total_one_count": {
      "nested": {
        "path": "my.failures"
      },
      "aggs": {
        "filtered_ids": {
          "filter": {
            "match": {
              "my.failures.id": "one"
            }
          },
          "aggs": {
            "count": {
              "value_count": {
                "field": "my.failures.id"
              }
            }
          }
        }
      }
    }
  }
}

二、仅支持基础字符串操作的场景

如果你的查询工具不支持JSON解析,只能用字符串处理来近似统计:
核心是通过计算"id": "one"的出现次数——把字符串中所有该子串替换为空,用原长度减替换后的长度,再除以子串长度,得到单条日志里的出现次数,最后求和所有符合条件的日志。

示例SQL(不同引擎函数名可能略有差异,REPLACE和LENGTH是通用的):

SELECT SUM(
  (LENGTH(my.failures) - LENGTH(REPLACE(my.failures, '"id": "one"', ''))) / LENGTH('"id": "one"')
) AS total_one_count
FROM Log
WHERE my.failures LIKE '%one%'

⚠️ 注意:这种方法要保证"id": "one"不会出现在其他字段(比如file的文件名)里,否则会统计错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:37:03