azure 访问动态([string])的Kusto extract_all(...)结果

w8f9ii69  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(74)

下面是索引数组的最佳方法,就像extract_all()函数的输出一样?
我追求最简洁和直接的表达式隔离方式来引用match[0][0]和match 0值,没有任何副作用,如mvexpand中的temp列。
我觉得我错过了一些容易做这件事的东西。

print x="match first foo and bar, but not another foo and bar"
// extract_all(...) output is dynamic([string]), so 'match' is dynamic([string]) and 'match[0]' is dynamic(string)
// but ... it really is an array-of-arrays for multiple occurrences of multiple capture groups like 'match'.
// how do I index the array within match[0] without reparsing it all via parse_json?
| extend match = extract_all("(foo) and (bar)", x)
| extend first_occurence = match[0]
// I seem to need to do this to get the capture group values, since 'first_occurence' is dynamic(string)
// notes: not using mvexpand on purpose, I want to do this as an expression on the isolated function output; I do not want
// to create temp columns just to hold intermediate values
| extend first_occurence_captures = parse_json(tostring(first_occurence))
| extend myfoo = first_occurence_captures[0]
| extend mybar = first_occurence_captures[1]

字符串
输出:


的数据
更新:我尝试match[0][0],尽管Kusto桌面UI中显示语法错误。所以真实的的问题可能是有一个错误的语法错误阻止了我尝试它。
以下是我在Kusto中看到的。Explorer [v1.0.3.1276]



但输出如预期的那样起作用:


fhg3lkii

fhg3lkii1#

我已经在我的环境中重现了,以下是预期结果:
我尝试match[0][0],尽管Kusto桌面UI中显示语法错误。所以真实的的问题可能是有一个错误的语法错误阻止了我尝试它。
在这种情况下,KQL解释器不需要[],但嵌套数组在KQL中可用,但当我们运行查询时,它成功编译并给出如下输出:

print x ="match first foo and bar, but not in another c foo and bar"
| extend match = extract_all("(foo) and (bar)", x)
| extend foo = match[0][0] , bar  =match[0][1]

字符串

一米


的数据
这是Kql中预期的行为,如果你想进一步研究这个问题,我建议你打开一个support ticket对此进行进一步澄清。

相关问题