Amazon web services CloudWatch Insights查询-如何从计数中获取单个计数
我有一个包含playerId值的日志文件,有些玩家在该文件中有多个条目。我想得到一个确切的独特的计数,以独特的球员,无论他们是否有一个或多个条目在日志文件中 使用下面的查询,它扫描497条记录并找到346个唯一行(346是我想要的数字) 查询: 如果我将查询改为使用count_distinct,我会得到我想要的结果。示例如下:Amazon web services CloudWatch Insights查询-如何从计数中获取单个计数,amazon-web-services,amazon-cloudwatch,amazon-cloudwatchlogs,aws-cloudwatch-log-insights,Amazon Web Services,Amazon Cloudwatch,Amazon Cloudwatchlogs,Aws Cloudwatch Log Insights,我有一个包含playerId值的日志文件,有些玩家在该文件中有多个条目。我想得到一个确切的独特的计数,以独特的球员,无论他们是否有一个或多个条目在日志文件中 使用下面的查询,它扫描497条记录并找到346个唯一行(346是我想要的数字) 查询: 如果我将查询改为使用count_distinct,我会得到我想要的结果。示例如下: fields @timestamp, @message | sort @timestamp desc | filter @message like /(playerId
fields @timestamp, @message
| sort @timestamp desc
| filter @message like /(playerId)/
| parse @message "\"playerId\": \"*\"" as playerId
| stats count_distinct(playerId) as CT
然而,count_distinct的问题是,随着查询扩展到更大的时间范围/更多的记录,条目的数量会达到数千或数万条。这就提出了一个问题,因为这些数字变成了近似值,这是由于不同行为的本质
“返回字段的唯一值的数目。如果字段具有非常高的基数(包含许多唯一值),则count_distinct返回的值只是一个近似值。”
文件:
这是不可接受的,因为我需要确切的数字。稍微处理一下查询,然后坚持使用count(),而不是count\u distinct(),我相信这就是答案,但是我没有找到一个数字。。。不起作用的例子。。。有什么想法吗
例1:
fields @timestamp, @message
| sort @timestamp desc
| filter @message like /(playerId)/
| parse @message "\"playerId\": \"*\"" as playerId
| stats count(playerId) as CT by playerId
| stats count(*)
我们在理解查询时遇到问题
为了清楚起见,我希望在显示数字的单行中返回一个精确的计数 如果我们引入一个硬编码为“1”的虚拟字段会怎么样?其思想是检索其最小值,以便即使相同的
playerId
多次出现,它仍保持为“1”。然后我们对这个场求和
日志条目可能如下所示:
[1]"playerId": "1b45b168-00ed-42fe-a977-a8553440fe1a"
查询:
fields @timestamp, @message
| sort @timestamp desc
| filter @message like /(playerId)/
| parse @message "[*]\"playerId\": \"*\"" as dummyValue, playerId
| stats sum(min(dummyValue)) by playerId as CT
使用的参考资料:
fields @timestamp, @message
| sort @timestamp desc
| filter @message like /(playerId)/
| parse @message "[*]\"playerId\": \"*\"" as dummyValue, playerId
| stats sum(min(dummyValue)) by playerId as CT