Kusto 联接查询 - 如何联接 $left.column1 < $right.column2 上的 2 个表
Kusto Join Query - How to join 2 tables on $left.column1 < $right.column2
我在 Kusto 有 2 个 table:
- windowScans - 每行都来自这种格式:windowStart:long、windowEnd:long
- 文件 - 每行都来自这种格式:timestamp:long、fileId:string
我想为每个文件加入所有匹配的 windowScan 行:timestamp > windowStart && timestamp < windowEnd。
结果应该是所有文件的 table,并且对于每个文件,所有匹配的 windowScan 对。
一个 windowScan 行可能会出现在许多文件中。
知道如何执行查询吗?
这是一种解决方案:
let windowsScan = datatable(windowStart:long, windowEnd:long)[1,5, 6,8, 10, 14];
let files = datatable(timestamp:long, fileId:string)[3,"a", 4,"b", 4,"c", 6, "a", 11,"a", 13, "b"];
windowsScan
| extend timestamp = range(windowStart, windowEnd, 1)
| mv-expand timestamp to typeof(long)
| join kind=inner (files) on timestamp
| summarize take_any(windowStart, windowEnd) by fileId, timestamp
结果:
fileId
timestamp
windowStart
windowEnd
a
3
1
5
b
4
1
5
c
4
1
5
a
6
6
8
a
11
10
14
b
13
10
14
我在 Kusto 有 2 个 table:
- windowScans - 每行都来自这种格式:windowStart:long、windowEnd:long
- 文件 - 每行都来自这种格式:timestamp:long、fileId:string
我想为每个文件加入所有匹配的 windowScan 行:timestamp > windowStart && timestamp < windowEnd。 结果应该是所有文件的 table,并且对于每个文件,所有匹配的 windowScan 对。 一个 windowScan 行可能会出现在许多文件中。 知道如何执行查询吗?
这是一种解决方案:
let windowsScan = datatable(windowStart:long, windowEnd:long)[1,5, 6,8, 10, 14];
let files = datatable(timestamp:long, fileId:string)[3,"a", 4,"b", 4,"c", 6, "a", 11,"a", 13, "b"];
windowsScan
| extend timestamp = range(windowStart, windowEnd, 1)
| mv-expand timestamp to typeof(long)
| join kind=inner (files) on timestamp
| summarize take_any(windowStart, windowEnd) by fileId, timestamp
结果:
fileId | timestamp | windowStart | windowEnd |
---|---|---|---|
a | 3 | 1 | 5 |
b | 4 | 1 | 5 |
c | 4 | 1 | 5 |
a | 6 | 6 | 8 |
a | 11 | 10 | 14 |
b | 13 | 10 | 14 |