我有这样的疑问:
TableA
| where env_time > ago(30d)
| where Name in ("A" "B", "C", "D", "E")
| where Client == "Android"
| summarize count() by UserId, Name
它在 1 天的时间间隔内运行良好,但量太大,运行超过 1 天会导致查询超时。
如何以某种方式重写 - 在过去 30 天中以 1 天的间隔运行查询,然后对各个 30 天的汇总进行联接,以便获得总体数据?
尝试使用以下查询对小间隔的 Kusto 查询进行分块,并最终聚合大间隔。
它不是一次性查询整个 30 天的时间段,而是将其分成更小的块,每天一个,以便查询独立处理每一天。这可以防止由于一次性处理过多数据而导致的超时问题。
join
函数将 TableA
数据与 range
表链接起来,该表保存每日间隔。连接各个每日摘要后,查询使用 summarize
聚合每天的计数。
现在,您可以获取每个 UserId 和 Name 在 30 天内出现的总次数,而无需运行一步处理所有 30 天的查询。
let dailySummaries = range DaysAgo from 0 to 29 step 1
| join kind=inner (
TableA
| where Name in ("A", "B", "C", "D", "E")
| where Client == "Android"
| summarize dailyCount = count() by UserId, Name, DaysAgo
) on DaysAgo
| summarize totalCount = sum(dailyCount) by UserId, Name;
dailySummaries
输出: