如何将小区间的 Kusto 查询分块并最终聚合大区间?

问题描述 投票:0回答:1

我有这样的疑问:

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 天的汇总进行联接,以便获得总体数据?

kql azure-data-explorer
1个回答
0
投票

尝试使用以下查询对小间隔的 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

输出: enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.