KQL使用has_any匹配内容后如何获取对应的匹配关键词?
实现方案
你可以通过展开关键词数组+匹配过滤的方式实现新增匹配值列的需求,完整查询逻辑如下:
- 首先读取外部CSV的关键词列,生成匹配用的关键词数组:
// 读取外部CSV中的关键词列,替换CSV路径为你的实际地址 let MatchKeywords = externaldata(ColumnName:string) [@"你的CSV存储路径"] with(format="csv", ignoreFirstRecord=true) // 如果CSV有表头就保留ignoreFirstRecord参数 | summarize make_list(ColumnName);
- 针对Events表做匹配查询,新增匹配值列:
Events // 注入关键词数组到每行数据 | extend TempKeywords = MatchKeywords // 展开关键词数组为单行单关键词 | mv-expand TempKeywords to typeof(string) // 过滤出当前行Title匹配对应关键词的记录 | where Title has TempKeywords // 可选:如果一行匹配多个关键词,用以下语句把所有匹配值聚合为数组,保证每个EventId只输出一行 | summarize MatchedColumnValue = make_list(TempKeywords), take_any(Title) by EventId // 输出你需要的列 | project Title, EventId, MatchedColumnValue
适配说明
- 如果你希望一个事件匹配多个关键词时输出多行,删除上面的
summarize行,直接将TempKeywords重命名为MatchedColumnValue即可 - 如果你只需要取第一个匹配到的关键词,把
summarize行替换为| summarize take_any(*) by EventId, Title | project-rename MatchedColumnValue = TempKeywords即可
内容的提问来源于stack exchange,提问作者Dhruv Jain
相关产品推荐
相关产品推荐

