You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拆分KQL查询结果为小块以实现CSV分块导出

KQL分块导出方案及Azure导出限制说明

分块导出实现方法

要把10.6万条记录拆成无重复、无遗漏的分块导出CSV,不要直接用take取数——无稳定排序的take返回结果随机,多次拉取会出现数据重复或遗漏,正确实现方式是稳定排序+全局行号分页:

  1. 所有关联查询、字段裁剪逻辑执行完成后,选择一组非空、无重复的字段做全局排序(比如VM名称+扩展发布者+扩展类型的组合),保证每次查询的结果顺序完全一致
  2. 用row_number()函数生成全局连续的行号
  3. 每次查询调整行号过滤区间,按固定块大小拉取数据即可,建议单块大小设置为1万-2万条,适配平台返回限制。

优化后的可直接使用的分块查询模板如下:

Resources
| where type == 'microsoft.compute/virtualmachines'
| extend
    JoinID = toupper(id),
    VMName = tostring(properties.osProfile.computerName),
    OSType = tostring(properties.storageProfile.osDisk.osType),
    VMSize = tostring(properties.hardwareProfile.vmSize),
    OSVersion = tostring(properties.extended.instanceView.osVersion),
    OSName = tostring(properties.extended.instanceView.osName)
| join kind=leftouter(
    Resources
    | where type == 'microsoft.compute/virtualmachines/extensions'
    | extend 
        VMId = toupper(substring(id, 0, indexof(id, '/extensions'))),
        ExtensionType = properties.type,
        ExtensionPublisher = properties.publisher,
        Extension_Publisher = tostring(properties.publisher)
) on $left.JoinID == $right.VMId
// 提前裁剪无用字段,减小单块数据体积
| project-away identity1, kind, managedBy, sku, identity, zones,extendedLocation,extendedLocation1, kind1, managedBy1, sku1, tags1, zones1, systemData1,tags, systemData, tenantId, JoinID, id1, location1, tenantId1, OSType, type1, apiVersion1, VMId, apiVersion, plan1, ExtensionPublisher
// 多字段组合排序保证结果顺序稳定
| sort by VMName asc, Extension_Publisher asc, ExtensionType asc
// 生成全局连续行号
| extend row_num = row_number()
// 每次修改这里的数值区间拉取对应分块:第一块0..20000,第二块20001..40000,直到覆盖全量10.6万条
| where row_num between (0 .. 20000)

你当前修改的版本存在几个问题:

  • 排序仅用了Extension_Publisher字段,该字段存在大量重复值,排序结果不稳定,分页时会出现数据错位
  • 行号过滤后直接take 200,没有做区间分段,无法覆盖全量数据
  • 裁剪字段时误删了VMName等核心标识字段,导出后无法区分条目归属

Azure平台导出相关限制

  • Azure Resource Graph(即你当前使用的查询环境,基于KQL语法查询Azure资源):
    • 单次查询默认最多返回1000条结果,配置分页参数后单次最多可拉取5万条记录
    • 查询执行超时时间为60秒,单查询返回数据量过大会直接中断
    • 门户自带的CSV导出功能单次最多导出1万条记录,超出部分会被直接截断
  • Azure Graph Explorer(查询Microsoft Graph数据的工具):
    • 无分页参数时单次请求最多返回100条记录,加$top参数单次最多返回999条
    • 全量数据必须依赖接口返回的@odata.nextLink逐页拉取,无一次性全量导出入口
    • 存在请求节流规则,短时间发起大量分页请求会被临时拦截

内容的提问来源于stack exchange,提问作者raindrop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:24:26