Azure Log Analytics中Kusto查询结果转JSON及分页实现问询
解决方案
1. 实现Kusto查询的分页逻辑
要实现分页,需要同时执行两个Kusto查询:
- 查询总条数:获取数据总量用于计算分页参数
<tablename> | count - 查询当前页数据:用
skip跳过前面的条目,take获取当前页的数量
比如第1页每页2条:<tablename> | skip (pageNumber - 1) * pageSize | take pageSizeskip 0 | take 2,第2页:skip 2 | take 2
2. 将返回结果映射为键值对数组
假设Azure返回的JSON结构如下(简化版):
{ "tables": [ { "columns": [{"name": "TimeStamp"}, {"name": "Level"}, {"name": "Message"}], "rows": [ ["2024-05-20T10:00:00Z", "Info", "User logged in"], ["2024-05-20T10:05:00Z", "Error", "Database connection failed"] ] } ] }
可以用以下代码(以JavaScript为例)将rows和columns映射为docs数组:
// 提取返回结果中的第一个表(通常查询结果只有一个表) const resultTable = response.tables[0]; const columns = resultTable.columns.map(col => col.name); const rows = resultTable.rows; // 映射为键值对数组 const docs = rows.map(row => { const doc = {}; columns.forEach((colName, index) => { doc[colName] = row[index]; }); return doc; });
处理后docs的结构:
[ {"TimeStamp": "2024-05-20T10:00:00Z", "Level": "Info", "Message": "User logged in"}, {"TimeStamp": "2024-05-20T10:05:00Z", "Level": "Error", "Message": "Database connection failed"} ]
3. 组装最终的分页JSON结构
将总条数、分页参数和映射后的docs组装成UI需要的结构:
const pageNumber = 1; // 当前页码,从前端传入 const pageSize = 2; // 每页条数,从前端传入 const totalDocs = countResult.tables[0].rows[0][0]; // 总条数查询结果 const finalResponse = { totalDocs: totalDocs, page: pageNumber, pageSize: pageSize, totalPages: Math.ceil(totalDocs / pageSize), docs: docs };
最终输出的JSON示例:
{ "totalDocs": 100, "page": 1, "pageSize": 2, "totalPages": 50, "docs": [ {"TimeStamp": "2024-05-20T10:00:00Z", "Level": "Info", "Message": "User logged in"}, {"TimeStamp": "2024-05-20T10:05:00Z", "Level": "Error", "Message": "Database connection failed"} ] }
注意事项
- 如果你的查询有过滤条件(比如
where子句),总条数查询和分页查询要保持一致的过滤条件,避免数据总数和分页数据不匹配 - 若使用后端语言(如C#、Python)处理,逻辑类似:提取列名列表,遍历行数据映射为键值对对象,再组装分页结构
内容的提问来源于stack exchange,提问作者Sindhu1990
相关产品推荐
相关产品推荐

