如何在Kusto中遍历时间戳列表执行关联查询?
Kusto 查询实现方案
你可以使用Kusto的apply操作实现需求,它能对每条"Sample message"记录单独执行子查询,找到对应时间范围内最早的"Different message"日志。完整查询代码如下:
// 筛选过去1天内所有"Sample message"的记录 let sample_records = table1 | where Timestamp > ago(1d) | where Message == "Sample message"; // 对每条样本记录,查找其10分钟窗口内最早的目标日志 sample_records | extend SampleTimestamp = Timestamp // 重命名样本时间戳,避免后续混淆 | apply ( table1 | where Timestamp between (SampleTimestamp .. SampleTimestamp + 10m) | where Message == "Different message" | arg_min(Timestamp, *) // 取出时间最早的日志,*保留该日志的所有列 ) // 可选:整理输出列,按需保留字段 | project 样本时间戳 = SampleTimestamp, 最早目标日志时间戳 = Timestamp, 目标日志内容 = Message
关键逻辑说明
apply操作会遍历sample_records中的每一条记录,针对每条记录的SampleTimestamp执行子查询。- 子查询通过
between限定时间范围:从样本时间戳开始,往后10分钟。 arg_min(Timestamp, *)确保只返回该时间范围内时间最早的"Different message"日志,*会保留这条日志的所有字段(比如Message、其他可能存在的列)。- 如果某个样本时间戳在10分钟内没有匹配的"Different message"日志,这条样本记录会被自动过滤掉;若需保留无匹配的记录,可以在
apply的子查询末尾添加| union (datatable(Timestamp:datetime, Message:string)[datetime(null), ""]) | take 1来补充空结果。
内容的提问来源于stack exchange,提问作者SR Angiras
相关产品推荐
相关产品推荐

