我有一个 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 |
但我需要旋转版本
对于这样一个简单的情况,即当
count
或 sum(field)
您可以执行以下操作
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