如何在 Kusto 中创建任意大小的窗口?

2024-01-10

Using prev() https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/prevfunction函数我可以单独访问前几行。

mytable
| sort by Time asc
| extend mx = max_of(prev(Value, 1), prev(Value, 2), prev(Value, 3))

如何定义一个窗口以更通用的方式聚合?假设我之前的行中最多需要 100 个值。如何编写不需要重复的查询prev()100次?


可以通过组合来实现scan https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scan-operator and 系列统计动态() https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/series-stats-dynamicfunction.

scan用于创建每个记录的最后 x 值的数组。
series_stats_dynamic()用于获取每个数组的最大值。

// Data sample generation. Not part of the solution
let mytable = materialize(range i from 1 to 15 step 1 | extend Time = ago(1d*rand()),  Value = toint(rand(100)));
// Solution starts here
let window_size = 3; // >1
mytable
|   order by Time asc
|   scan declare (last_x_vals:dynamic) 
    with 
    (
        step s1 : true => last_x_vals = array_concat(array_slice(s1.last_x_vals, -window_size + 1, -1), pack_array(Value));
    )
|   extend toint(series_stats_dynamic(last_x_vals).max)
i Time Value last_x_vals max
5 2022-06-10T11:25:49.9321294Z 45 [45] 45
14 2022-06-10T11:54:13.3729674Z 82 [45,82] 82
2 2022-06-10T13:25:40.9832745Z 44 [45,82,44] 82
1 2022-06-10T17:38:28.3230397Z 24 [82,44,24] 82
7 2022-06-10T18:29:33.926463Z 17 [44,24,17] 44
15 2022-06-10T19:54:33.8253844Z 9 [24,17,9] 24
3 2022-06-10T20:17:46.1347592Z 43 [17,9,43] 43
12 2022-06-11T00:02:55.5315197Z 94 [9,43,94] 94
9 2022-06-11T00:11:18.5924511Z 61 [43,94,61] 94
11 2022-06-11T00:39:40.6858444Z 38 [94,61,38] 94
4 2022-06-11T03:54:59.418534Z 84 [61,38,84] 84
10 2022-06-11T05:55:38.2904242Z 6 [38,84,6] 84
6 2022-06-11T07:25:43.3977923Z 36 [84,6,36] 84
13 2022-06-11T09:36:08.7904844Z 28 [6,36,28] 36
8 2022-06-11T09:51:45.2225391Z 73 [36,28,73] 73

Fiddle https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA01Ry07DMBC8R8o/zNGG0tRCXFrRE2cuIK7RNllaC8eO7C1tUD8e53GoL/Y+ZndmXFV4IyEk6nrHOLLnSGKDX+M9CHqKgvANOTFScOexUhaOBd0gdMiIV3QkHC05+8cqkj8yLL5j6GAgAeYFSbjPwQ18FfYtPm034ugYlGkfMqRVWq+AL3LnsSDBelFT3mw2WutdWVQVPpb9eV5mlXDiyDOXi/VtuNQpM8jw5x1y996UxcKxLG4AQmw54jDM6yk1czo15NFy4ygylKMk9bX+JZe27eCps41GWeS+vEROy1PN13gmbclgC4kj+T3uRowiY6ShboJvSNQcJGcbVsms7zpXeLoX8QiTMyab0lPzU084NdkzmTEu1jP9xdLZspT/gVOd/ZFUL/TvJel1R1f9Dzc2c5zzAQAA

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Kusto 中创建任意大小的窗口? 的相关文章

随机推荐