【发布时间】:2019-04-11 14:34:09
【问题描述】:
我有带有 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
我收到无法解析查询错误?
【问题讨论】:
我有带有 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
我收到无法解析查询错误?
【问题讨论】:
您发布的查询在 join 之前有一个冗余管道 (|)。
从效率的角度来看,确保join 的左侧较小,如下所示:https://docs.microsoft.com/en-us/azure/kusto/query/best-practices#join-operator
【讨论】:
评论太长了。正如@Yoni L 指出的那样,问题是管道操作符加倍。
对于任何有 SQL 背景的人join 可能有点违反直觉(实际上是kind=innerunique):
种类未指定,种类=innerunique
只有左侧的一行与 on 的每个值匹配 钥匙。输出包含该行与行的每个匹配的行 从右边。
Kind=inner
对于匹配行的每个组合,输出中都有一行 从左到右。
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 │
└─────┴───────┴──────┴────────┘
【讨论】:
KQL 中有许多连接类型,例如innerunique、inner、leftouter、rightouter、fullouter、anti 等等。在这里你可以找到full list
【讨论】: