如何修改Kusto查询使结果为对象列表而非嵌套列表?
通过KQL修改查询结果格式,实现直接的对象列表输出
可以完全通过修改KQL查询实现格式转换,无需额外编程处理。以下提供两种适配你需求的解决方案:
方案1:返回单一行,包含完整的对象列表
这种方案会将所有时间点的统计结果打包成一个数组,最终查询返回一行,对应API结果中rows字段直接是你需要的对象列表(只需提取该数组即可):
let startTime = datetime(${someTime}); let endTime = datetime(${someOtherTime}); pageViews | where client_Type == 'Browser' and cloud_RoleName == '${someCloudName}' | make-series count(itemCount) default = 0 on timestamp from startTime to endTime step ${someTimespan} | mv-expand timeStamp = timestamp, value = count_itemCount | project timeStamp, value | summarize rows = make_list(pack('timeStamp', timeStamp, 'value', value))
原理说明:
- 原查询中
project rows = pack(...)会为每个时间点生成单独一行,每行仅包含一个对象,导致API返回的rows是嵌套数组([[对象1], [对象2], ...])。 - 修改后通过
summarize make_list(...)将所有时间点的对象收集到一个数组中,最终查询仅返回一行,API返回的rows会是[[对象1, 对象2, ...]],取出数组内部的元素就是你需要的直接对象列表。
方案2:返回多行,每行包含独立字段
如果你的API支持将列值数组转换为对象,可以直接返回timeStamp和value两个字段:
let startTime = datetime(${someTime}); let endTime = datetime(${someOtherTime}); pageViews | where client_Type == 'Browser' and cloud_RoleName == '${someCloudName}' | make-series count(itemCount) default = 0 on timestamp from startTime to endTime step ${someTimespan} | mv-expand timeStamp = timestamp, value = count_itemCount | project timeStamp, value
原理说明:
- 查询返回的每行包含
timeStamp和value两个字段,API返回的rows会是[[时间戳1, 数值1], [时间戳2, 数值2], ...],你可以让API将每个子数组映射为{timeStamp: 时间戳, value: 数值}格式的对象。
内容的提问来源于stack exchange,提问作者moinierer3000
相关产品推荐
相关产品推荐

