Azure ADX物化视图使用argmax后如何移除参数独立时间戳
问题:Azure ADX物化视图中移除argmax生成的多余时间戳列
在Azure ADX中创建物化视图时,要求summarize必须是查询的最后语句。我用argmax函数对多个参数取最近的非空值,写法如下:
table_name | summarize arg_max( parametername1 = iif(isnotempty(parametername1), ts, unixtime_nanoseconds_todatetime(0)), parametername1 = parametername1 ), arg_max( parametername2 = iif(isnotempty(parametername2 ), ts, unixtime_nanoseconds_todatetime(0)), parametername2 =parametername2 ), ... by origin, bin(ts,1m)
问题在于argmax会返回每个参数对应的时间戳和参数值,生成两个独立列,但我已有bin处理后的ts,无需每个参数的独立时间戳。由于不能将project或project-away作为最后语句,尝试过的方法均无效,请问是否有可行方案?
解决方案
直接通过访问argmax返回记录的参数值字段,就能在summarize内部完成只保留参数值的操作,无需额外的project步骤。
修改后的查询如下:
table_name | summarize parametername1 = arg_max(iif(isnotempty(parametername1), ts, unixtime_nanoseconds_todatetime(0)), parametername1).parametername1, parametername2 = arg_max(iif(isnotempty(parametername2), ts, unixtime_nanoseconds_todatetime(0)), parametername2).parametername2, // 其他参数依此类推 by origin, bin(ts, 1m)
原理说明
arg_max函数返回的是一个包含两个元素的记录:第一个是用于排序比较的时间戳,第二个是对应的参数值。通过.参数名的方式直接提取记录中的参数值部分,就能让summarize只生成你需要的参数列,不会附带每个参数的独立时间戳,完全符合物化视图对summarize作为最后语句的限制。
内容的提问来源于stack exchange,提问作者Tiscit
相关产品推荐
相关产品推荐

