我正在尝试在 Azure 资源上编写 Kusto 查询来收集各个页面视图。
我当前的查询如下所示:
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 rows = pack('timeStamp', timeStamp, 'value', value)
它产生以下结果:
{
"metrics": {
"tables": [
{
"name": "PrimaryResult",
"columns": [
{
"name": "rows",
"type": "dynamic"
}
],
"rows": [
[
{
"timeStamp": "2024-01-01T07:51:20.3540000Z",
"value": 23
}
],
[
{
"timeStamp": "2024-01-02T07:51:20.3540000Z",
"value": 142
}
],
// etc. etc.
],
"columnDescriptors": [
{
"name": "rows",
"type": "dynamic"
}
]
}
],
"status": "Success"
}
}
但是,对于我的 API,我希望数据(或行)位于对象列表中,而不是对象列表列表中,如下所示:
"rows":
[
{
"timeStamp": "2024-01-01T07:51:20.3540000Z",
"value": 23
},
{
"timeStamp": "2024-01-02T07:51:20.3540000Z",
"value": 142
}
// etc. etc.
]
这可以通过修改上面的查询来完成还是我必须以编程方式完成?
抱歉,如果这是一个愚蠢的问题,我找不到任何对我有帮助的东西。
我还可以通过使用上面的查询而不使用最后一行来将数据放在列表列表中,但我真的更喜欢对象列表,如上所述。
以编程方式执行此操作也不会成为问题,但我更喜欢仅包含查询的解决方案,而且我正在尝试了解有关 KQL 执行此操作的更多信息😊
提前感谢您的回复。
您可以使用的一种方法是使用您指定的字符串操作来格式化输出。 make_set()、strcat() 和 replace_string() 可能很有用。
let T = datatable(timeStamp:datetime, value:int) [
datetime('2024-01-01T07:51:20.3540000Z'), 23,
datetime('2024-01-02T07:51:20.3540000Z'), 142
];
T
| extend Message = strcat(
'{ "timestamp": "', timeStamp, '", "value": "', value, '" }'
)
| summarize Rows = make_set(Message)
| summarize by Output = strcat(
'"rows": ', Rows, ']'
)
| extend Output = replace_string(Output, '\\', '')
| extend Output = replace_string(Output, '}","{', '}, {')
输出:
"Output": "rows": ["{ "timestamp": "2024-01-01T07:51:20.3540000Z", "value": "23" }, { "timestamp": "2024-01-02T07:51:20.3540000Z", "value": "142" }"]]