日志见解查询 - 使用数据透视进行分组

问题描述 投票:0回答:1

我有一个 CloudWatch 日志流,其中包含如下所示的结构化记录:

类型 环境
类型1 开发
类型1 产品
类型2 开发

我想通过环境查询每种类型的计数(以绘制图表)

相当于以下 SQL 语句:

SELECT 
   SUM(CASE WHEN env = 'dev' THEN 1 ELSE 0 END) AS dev, 
   SUM(CASE WHEN env = 'prod' THEN 1 ELSE 0 END) AS prod 
FROM TABLE 
GROUP BY type

我写了以下查询:

fields @timestamp, record.type as type, record.env as env
| stats count(env="dev") as dev, count(env="prod") as prod by type

期望得到以下结果:

类型 开发 产品
类型1 1 1
类型2 1 0

但不幸的是,无论

count()
内应用的过滤器如何,我都得到相同的两列计数,如下所示:

我怎样才能达到我需要的输出

注意

我可以执行以下查询来获取按每个

env
分组的结果:

fields @timestamp, record.type as type, record.env as env
| stats count(*) by type, env

我会得到:

类型 环境 计数()
类型1 开发 1
类型1 产品 1
类型2 开发 1

但我需要旋转版本

amazon-cloudwatch aws-cloudwatch-log-insights
1个回答
0
投票

对于这样一个简单的情况,即当

  • 仅需要
    count
    sum(field)
  • 选项数量有限(例如dev、beta、gamma、prod)

您可以执行以下操作

fields record.type as type, record.env as env, record.docsCount as docsCount
| fields (record.env="dev") as IsDev, (record.env="prod") as isProd
| stats 
   sum(isDev) as devEntries, 
   sum(isDev * docsCount) as devDocsCount,
   sum(isProd) as prodEntries, 
   sum(isProd * docsCount) as prodDocsCount 
  by type
© www.soinside.com 2019 - 2024. All rights reserved.