You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Kusto中使用Join结合contains运算符时如何匹配单个值并去重

解决方法

要避免关联后出现重复行,核心是先对表B做预处理,确保每个ID只保留第一个包含"blah"的Text行,再和表A做关联。

方案1:保留首个匹配的Text

修改你的查询,先对B表按ID分组,只取每个ID下第一个符合条件的记录:

let B = datatable (ID:long, Text:string) [ 
1, "blah blah blah",
1, "123 123 123",
1, "123 blah 123",
2, "blah blah blah",
2, "234 234 123",
2, "123 blah 234"]; 
let A = datatable (ID:long, Name:string) [ 
1, "abc",
2, "cde",
3, "def",
4, "efg",
5, "ghi",
6, "ijk"]; 
// 预处理B:每个ID只保留第一个包含"blah"的行
let filtered_B = B 
    | where Text contains "blah"
    | partition by ID (take 1); // 按ID分组后取第一行
A
| join kind=leftouter filtered_B on ID
| project ID, Name, Text

这个查询会输出你期望的结果:每个ID最多一行,仅保留B中首个匹配的Text,无重复。

方案2:仅验证存在性(更高效)

如果你的需求只是确认B中是否存在该ID的"blah",不需要具体的Text内容,可以用聚合查询直接返回布尔标记,性能更优:

let B = datatable (ID:long, Text:string) [ 
1, "blah blah blah",
1, "123 123 123",
1, "123 blah 123",
2, "blah blah blah",
2, "234 234 123",
2, "123 blah 234"]; 
let A = datatable (ID:long, Name:string) [ 
1, "abc",
2, "cde",
3, "def",
4, "efg",
5, "ghi",
6, "ijk"]; 
let B_has_blah = B
    | summarize has_blah = countif(Text contains "blah") > 0 by ID;
A
| join kind=leftouter B_has_blah on ID
| project ID, Name, has_blah

输出结果会显示每个ID是否存在"blah",没有重复行,且查询开销更低。


内容的提问来源于stack exchange,提问作者Sahil Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:24:26