ADX Kusto如何通过单查询获取多ID元组的最新行数据
问题答案
完全可以通过单条Kusto查询语句实现该需求,无需为每个设备-遥测元组单独发起查询。
核心实现思路
利用Kusto内置的arg_max聚合函数,按DeviceId和TelemetryId分组后,直接取每组中时间戳最新的完整行记录即可。
参考查询语句
假设存储遥测数据的表名为TelemetryData,查询DeviceId = 1的所有遥测项最新值的语句如下:
TelemetryData | where DeviceId == 1 | summarize arg_max(TimeStamp, *) by DeviceId, TelemetryId | sort by TelemetryId asc
语句说明
where DeviceId == 1:过滤出目标设备的所有遥测数据,若需要同时查询多个设备,可修改为where DeviceId in (1,2,3)的形式summarize arg_max(TimeStamp, *) by DeviceId, TelemetryId:按设备ID、遥测ID分组,返回每组中TimeStamp值最大(即最新上报)的行的所有字段sort by TelemetryId asc:按遥测ID排序输出,和示例预期格式对齐,非必须项可按需省略
性能优化写法
如果你已经明确知道目标设备关联的TelemetryId集合,可以在分组前增加一层遥测ID过滤,减少数据扫描量提升查询速度,示例如下:
TelemetryData | where DeviceId == 1 | where TelemetryId in (1,2,3) // 替换为目标设备实际关联的遥测ID集合 | summarize arg_max(TimeStamp, *) by DeviceId, TelemetryId | sort by TelemetryId asc
上述语句运行在给出的示例数据上时,返回结果和预期结果完全一致。
内容的提问来源于stack exchange,提问作者codefluent
相关产品推荐
相关产品推荐

