如何在Kusto中按时间统计重复ID含指定URL的情况?
Kusto查询实现:筛选非唯一ID并统计特定URL请求次数
需求说明
- 从给定的URL请求数据集中,筛选出存在多行记录的非唯一
Id - 基于这些非唯一
Id,按指定时间单位统计其中URL为internal-url-predefined的请求次数
完整实现查询
// 第一步:筛选非唯一Id并保存为临时表,供后续复用 let non_unique_ids = datatable(Id:string, Datetime:datetime, URL:string, country:string) [ '1', datetime(2018-10-16 00:00), 'URL1', '', '1', datetime(2018-10-16 00:01), 'internal-url-predefined', '', '2', datetime(2018-10-16 00:02), 'URL2', '', '3', datetime(2018-10-16 00:03), 'URL3', '', '4', datetime(2018-10-16 00:03), 'URL4', '', '4', datetime(2018-10-16 00:03), 'internal-url-predefined', '', ] | summarize row_count = count() by Id | where row_count > 1 | project Id; // 第二步:复用临时表数据,按时间单位统计目标URL请求次数 datatable(Id:string, Datetime:datetime, URL:string, country:string) [ '1', datetime(2018-10-16 00:00), 'URL1', '', '1', datetime(2018-10-16 00:01), 'internal-url-predefined', '', '2', datetime(2018-10-16 00:02), 'URL2', '', '3', datetime(2018-10-16 00:03), 'URL3', '', '4', datetime(2018-10-16 00:03), 'URL4', '', '4', datetime(2018-10-16 00:03), 'internal-url-predefined', '', ] | where Id in (non_unique_ids) | where URL == 'internal-url-predefined' | summarize request_count = count() by bin(Datetime, 1m) // 可替换为1h、1d等调整时间粒度
结果复用方式
通过Kusto的let语句将第一步筛选出的非唯一Id集合保存为临时表non_unique_ids,后续查询直接使用where Id in (non_unique_ids)引用该集合,避免重复执行筛选逻辑,提升查询效率。
用到的Kusto特性
- let语句:定义临时表/变量,实现查询逻辑的模块化复用,简化代码结构。
- summarize运算符:按指定维度分组聚合数据,分别用于统计每个
Id的行数、按时间粒度统计请求次数。 - bin()函数:将datetime类型数据按指定时间粒度(分钟/小时/天等)分组,满足按时间单位统计的需求。
- in运算符:关联临时表数据,快速筛选出属于非唯一
Id的记录。
内容的提问来源于stack exchange,提问作者shadyabhi
相关产品推荐
相关产品推荐

