如何均等拆分Application Insights表数据以规避PowerBI API行限制?
均等拆分Application Insights数据集的KQL方案
核心思路
通过给数据生成连续行号的方式实现均等分片,无需硬编码日期,自动适配不同月份的数据量差异:
- 按
insertDate排序保证分片结果稳定,避免重复或遗漏 - 动态计算总行数与单分片行数,确保各分片数据量接近均等
- 基于行号范围过滤出无重叠的数据集
拆分4个数据集的查询
步骤1:先获取总行数(可选,也可在分片查询中动态计算)
// 替换为你的实际表名 your_table_name | count
分片1(第1-25%数据)
let TotalRows = toscalar(your_table_name | count); let BatchSize = round(TotalRows / 4); your_table_name | order by insertDate asc | extend RowNumber = row_number() | where RowNumber between (1 .. BatchSize) | project-away RowNumber // 移除行号,保留原数据结构
分片2(第25-50%数据)
let TotalRows = toscalar(your_table_name | count); let BatchSize = round(TotalRows / 4); your_table_name | order by insertDate asc | extend RowNumber = row_number() | where RowNumber between (BatchSize + 1 .. BatchSize * 2) | project-away RowNumber
分片3(第50-75%数据)
let TotalRows = toscalar(your_table_name | count); let BatchSize = round(TotalRows / 4); your_table_name | order by insertDate asc | extend RowNumber = row_number() | where RowNumber between (BatchSize * 2 + 1 .. BatchSize * 3) | project-away RowNumber
分片4(剩余数据)
let TotalRows = toscalar(your_table_name | count); let BatchSize = round(TotalRows / 4); your_table_name | order by insertDate asc | extend RowNumber = row_number() | where RowNumber > BatchSize * 3 | project-away RowNumber
拆分5个数据集的查询
仅需调整BatchSize的计算逻辑,其余分片逻辑类似:
分片1示例
let TotalRows = toscalar(your_table_name | count); let BatchSize = round(TotalRows / 5); your_table_name | order by insertDate asc | extend RowNumber = row_number() | where RowNumber between (1 .. BatchSize) | project-away RowNumber
其余分片依次调整行号范围即可,最后一个分片取RowNumber > BatchSize * 4。
示例数据测试
将上述查询中的your_table_name替换为示例表T,即可直接验证分片效果:
let T = datatable(release:string, insertDate:datetime ) [ "2205", datetime(2022-01-05), "2205", datetime(2022-01-10), "2205", datetime(2022-02-10), "2204", datetime(2022-03-25), "2203", datetime(2022-04-15), "2205", datetime(2022-04-12), "2205", datetime(2022-05-12), "2206", datetime(2022-06-23), "2207", datetime(2022-07-27), "2209", datetime(2022-08-12), "2201", datetime(2022-09-26), "2201", datetime(2022-10-08), ]; let TotalRows = toscalar(T | count); let BatchSize = round(TotalRows / 4); T | order by insertDate asc | extend RowNumber = row_number() | where RowNumber between (1 .. BatchSize) | project-away RowNumber
注意事项
- 排序字段选择
insertDate是为了保证每次查询的分片结果一致,若有更合适的有序字段也可替换 - 动态计算逻辑会自动适配数据量变化,无需手动调整分片范围
- 在Power BI中,可将每个分片查询作为独立数据源,通过「追加查询」合并为完整数据集
内容的提问来源于stack exchange,提问作者novice8989
相关产品推荐
相关产品推荐

