如何拆分Kusto查询为单日间隔执行后再聚合大区间数据?
Kusto分天聚合解决大跨度查询超时问题
原查询问题
原查询在查询单天数据时正常,但查询30天全量数据因数据量过大超时:
TableA | where env_time > ago(30d) | where Name in ("A", "B", "C", "D", "E") // 原查询此处缺少逗号,已修正语法问题 | where Client == "Android" | summarize count() by UserId, Name
改写后的分天查询方案
通过拆分日期范围、按天单独执行查询再合并结果,规避单查询处理超大数据量的问题:
// 生成过去30天的每日起始时间列表 let date_range = range start_time from ago(30d) to now() step 1d; // 遍历每日时间范围,执行单天查询后合并结果 union (foreach (day_start in date_range) { TableA | where env_time between (day_start .. day_start + 1d) | where Name in ("A", "B", "C", "D", "E") | where Client == "Android" | summarize day_count = count() by UserId, Name }) // 汇总所有天的统计结果 | summarize total_count = sum(day_count) by UserId, Name
关键说明
- 日期范围拆分:用
range函数生成精准的每日起始时间,确保每个子查询只处理单日数据 - 分天独立查询:借助
foreach遍历日期列表,复用单天查询的稳定性能,避免一次性加载全量数据 - 结果分层聚合:先对单日数据做局部计数,再通过外层
summarize汇总全局结果,保证最终统计维度与原查询一致
内容的提问来源于stack exchange,提问作者Shivam Raina
相关产品推荐
相关产品推荐

