2

我有带有 DstIP_s 等字段的 SecurityLog 并希望显示与我的 trojanDst 表匹配的记录

let trojanDst = datatable (DstIP_s:string)
    [    "1.1.1.1","2.2.2.2","3.3.3.3"
];
SecurityLog |
| join trojanDst  on DstIP_s

我收到查询无法解析 错误?

4

3 回答 3

4

您发布的查询|join.

从效率的角度来看,确保左侧join是较小的,如下所示:https ://docs.microsoft.com/en-us/azure/kusto/query/best-practices#join-operator

于 2019-04-11T15:40:07.033 回答
2

评论太长了。正如@Yoni L指出的那样,问题是双重管道运算符。


对于任何有 SQL 背景的人来说join可能有点违反直觉(实际上是这样kind=innerunique):

加入运算符

kind 未指定,kind=innerunique

对于 on 键的每个值,只有左侧的一行匹配。输出包含该行的每个匹配行,其中行从右侧开始。

种类=内在

对于左右匹配行的每个组合,输出中都有一行。

let t1 = datatable(key:long, value:string)  
[
1, "a",  
1, "b"  
];
let t2 = datatable(key:long, value:string)  
[  
1, "c", 
1, "d"  
];
t1| join t2 on key;

输出:

┌─────┬───────┬──────┬────────┐
│ key │ value │ key1 │ value1 │
├─────┼───────┼──────┼────────┤
│   1 │ a     │    1 │ c      │
│   1 │ a     │    1 │ d      │
└─────┴───────┴──────┴────────┘

演示


SQL风格JOIN版本:

let t1 = datatable(key:long, value:string)  
[
1, "a",  
1, "b"  
];
let t2 = datatable(key:long, value:string)  
[  
1, "c", 
1, "d"  
];
t1| join kind=inner t2 on key;

输出:

┌─────┬───────┬──────┬────────┐
│ key │ value │ key1 │ value1 │
├─────┼───────┼──────┼────────┤
│   1 │ b     │    1 │ c      │
│   1 │ a     │    1 │ c      │
│   1 │ b     │    1 │ d      │
│   1 │ a     │    1 │ d      │
└─────┴───────┴──────┴────────┘

演示

于 2019-04-14T10:37:41.817 回答
1

KQL 中有许多连接类型,例如innerunique、inner、leftouter、rightouter、fullouter、anti 等。在这里您可以找到完整列表

于 2019-04-15T08:14:01.357 回答