如何访问Kusto多个let语句结果并合并查询以获取bin函数参数
ADX访问let查询结果&合并查询的方法
一、访问第一个let查询的内部结果
你的bin_size是用summarize生成的单行结果表,要在后续查询里直接调用其中的x_bin_size和y_bin_size,有两种实用方式:
直接引用表列名
因为bin_size只有一行数据,ADX支持直接用bin_size.x_bin_size、bin_size.y_bin_size的格式引用列值,就像你示例里写的那样,悬停能看到结果也说明这种方式是有效的。转成标量变量更清晰
要是想避免表引用的歧义,也可以用toscalar()把每个统计值单独提取成标量变量,写法如下:let x_bin_size = toscalar(T | summarize (max(X) - min(X)) / ...); let y_bin_size = toscalar(T | summarize (max(Y) - min(Y)) / ...); let result = T | project X, Y | summarize Count=count() by bin(X, x_bin_size), bin(Y, y_bin_size); result
二、合并为单个查询
可以用materialize()函数先一次性算出X、Y的极值,复用结果避免重复扫描表T,效率更高:
T | materialize ( let stats = materialize(T | summarize minX=min(X), maxX=max(X), minY=min(Y), maxY=max(Y)); let x_bin_size = toscalar(stats | project (maxX - minX) / ...); let y_bin_size = toscalar(stats | project (maxY - minY) / ...); project X, Y | summarize Count=count() by bin(X, x_bin_size), bin(Y, y_bin_size) )
或者用更紧凑的写法,全程在一个查询流里完成,只扫描一次表T:
T | extend dummy=1 | summarize minX=min(X), maxX=max(X), minY=min(Y), maxY=max(Y), all_data=make_bag(pack("X",X,"Y",Y)) by dummy | extend x_bin_size=(maxX - minX)/..., y_bin_size=(maxY - minY)/... | mv-expand all_data | evaluate bag_unpack(all_data) | summarize Count=count() by bin(X, x_bin_size), bin(Y, y_bin_size)
内容的提问来源于stack exchange,提问作者Rene
相关产品推荐
相关产品推荐

