如何在 Azure 数据资源管理器/Kusto 中根据子字符串匹配连接两个表?

per*_*nce 2 azure-data-explorer kusto-explorer

我想根据数据表Fruit中具有子字符串匹配的单元格通过连接这两个表来创建一个结果表Things

let Fruit = datatable(fruit:string) 
[
"apple", 
"banana" 
"orange" 
];
let Things = datatable(fruit:string) 
[
"anappletree",
"myoranges" 
];
Run Code Online (Sandbox Code Playgroud)

我尝试过这样的事情:

Fruit
| join Things on $left.fruit contains $right.thing
Run Code Online (Sandbox Code Playgroud)

但出现此错误:

Semantic Error 
join: only column entities or equality expressions are allowed in this context.
Run Code Online (Sandbox Code Playgroud)

所以这里不能用contains

我如何加入这个以便我可以获得一张包含以下内容的表格

"apple" | "anappletree"
"banana" | ""
"orange" | "myoranges"
Run Code Online (Sandbox Code Playgroud)

Yon*_*i L 5

join如果(在您的情况下 - )的左侧Fruit足够小,您可以尝试使用mv-apply

let Fruit = datatable(fruit:string) 
[
    "apple", 
    "banana",
    "orange" 
];
let Things = datatable(thing:string) 
[
    "anappletree",
    "myoranges",
    "this is not a fruit"
];
let Fruit_list = toscalar(Fruit | summarize make_list(fruit));
Things
| mv-apply fruit = Fruit_list on (where thing contains fruit)
Run Code Online (Sandbox Code Playgroud)
事物 水果
一棵苹果树 苹果
橘子 橙子

或者,由于join在撰写本文时仅支持相等,您可以尝试使用交叉连接,然后使用以下方法进行过滤contains

let Fruit = datatable(fruit:string) 
[
    "apple", 
    "banana",
    "orange" 
];
let Things = datatable(thing:string) 
[
    "anappletree",
    "myoranges",
    "this is not a fruit"
];
Fruit
| extend dummy = 1
| join kind=inner (Things | extend dummy = 1) on dummy
| where thing contains fruit
| project-away dummy*
Run Code Online (Sandbox Code Playgroud)
水果 事物
苹果 一棵苹果树
橙子 橘子