gpt4 book ai didi

azure - KQL 字符串列表包含字符串列表的任意值

转载 作者:行者123 更新时间:2023-12-05 04:25:56 26 4
gpt4 key购买 nike

我有一个执行一些 KQL 的 API。

我正在执行一个 KQL,它会过滤所有行,以便某些列(字符串列表类型)包含某个给定字符串列表中的任何值。

基本上:

let foo1 = datatable(d: dynamic) [
dynamic([""]),
dynamic(["foobar"]),
dynamic(["Alice", "Bob"]),
dynamic(["Alice"])
];
foo1
| where d has_any (dynamic(["Alice", "otherthing"]))

它按照我的预期输出最后两行 - 我想要 d 具有任何值 “Alice”、“otherthing” 的所有行。

一切都按预期工作,直到我想要包含空字符串值的所有行:

let foo1 = datatable(d: dynamic) [
dynamic([""]),
dynamic(["foobar"]),
dynamic(["Alice", "Bob"]),
dynamic(["Alice"])
];
foo1
| where d has_any (dynamic([""]))

上面的结果输出所有行,而不是仅输出具有空字符串值的第一行。

  1. 为什么?
  2. 我可以更改哪些内容才能使其按预期工作?

最佳答案

1.

显然任何字符串都有空字符串,例如:

print "abc" has ""
<表类=“s-表”><标题>print_0 <正文>正确

Fiddle

2.

看来您正在寻找完整匹配而不是部分匹配。
在这种情况下,has可能会导致不良结果,例如:

print dynamic(["The story of Alice in wonderland", "Bob"]) has "Alice"
<表类=“s-表”><标题>print_0 <正文>正确

Fiddle

解决方案:

set_intersect()

let foo1 = datatable(d: dynamic) [
dynamic([""]),
dynamic(["foobar"]),
dynamic(["Alice", "Bob"]),
dynamic(["Alice"])
];
foo1
| where array_length(set_intersect(dynamic(["Alice", "otherthing"]), d)) > 0
<表类=“s-表”><标题>d <正文>[“爱丽丝”,“鲍勃”][“爱丽丝”]

Fiddle

let foo1 = datatable(d: dynamic) [
dynamic([""]),
dynamic(["foobar"]),
dynamic(["Alice", "Bob"]),
dynamic(["Alice"])
];
foo1
| where array_length(set_intersect(dynamic([""]), d)) > 0
<表类=“s-表”><标题>d <正文>[""]

Fiddle

关于azure - KQL 字符串列表包含字符串列表的任意值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73127559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com