下面是索引数组的最佳方法,就像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]
的
但输出如预期的那样起作用:
的
1条答案
按热度按时间fhg3lkii1#
我已经在我的环境中重现了,以下是预期结果:
我尝试match[0][0],尽管Kusto桌面UI中显示语法错误。所以真实的的问题可能是有一个错误的语法错误阻止了我尝试它。
在这种情况下,KQL解释器不需要
[]
,但嵌套数组在KQL中可用,但当我们运行查询时,它成功编译并给出如下输出:字符串
一米
的数据
这是Kql中预期的行为,如果你想进一步研究这个问题,我建议你打开一个support ticket对此进行进一步澄清。