Kusto Join查询:如何按$left.column1 < $right.column2条件关联两张表
Kusto 区间匹配关联查询方案
基础实现(推荐)
直接使用Kusto支持的非等值左外连接即可满足需求,语法简洁且性能更优:
files | join kind=leftouter windowScans on $left.timestamp > $right.windowStart and $left.timestamp < $right.windowEnd
逻辑说明
- 用
kind=leftouter指定左外连接,保证所有files表的记录都会被保留,如果某条file没有匹配到任何windowScan行,对应windowStart、windowEnd字段会返回null - 匹配条件中用
$left指代左表(files)、$right指代右表(windowScans),严格符合timestamp落在窗口区间内的匹配规则 - 天然支持同一个windowScan行匹配多个file,无需额外配置
大数据量优化版本
如果两张表数据规模较大,可以提前过滤无效的file记录减少join计算量:
// 先预计算所有窗口的时间边界 let minWindowTime = toscalar(windowScans | summarize min(windowStart)); let maxWindowTime = toscalar(windowScans | summarize max(windowEnd)); files // 先过滤掉完全不在所有窗口时间范围内的file,减少参与join的数据量 | where timestamp between (minWindowTime .. maxWindowTime) | join kind=leftouter windowScans on $left.timestamp > $right.windowStart and $left.timestamp < $right.windowEnd
旧版本Kusto兼容写法
如果当前环境不支持非等值join,可以用dummy字段实现等值join后再过滤:
files | extend dummy = 1 | join kind=leftouter (windowScans | extend dummy = 1) on dummy | where (timestamp > windowStart and timestamp < windowEnd) or isempty(windowStart) | project-away dummy, dummy1
内容的提问来源于stack exchange,提问作者RoeyB
相关产品推荐
相关产品推荐

