处理大型 Azure 资源数据集
Azure Resource Graph 旨在处理并获取 Azure 环境中资源的相关信息。 Resource Graph 加快了获取此类数据的速度,即使在查询数千条记录,也不例外。 Resource Graph 提供了多个大型数据集处理选项。
若要了解如何处理高频率查询,请转到针对受限制请求的指南。
数据集结果大小
默认情况下,Resource Graph 限制任何查询都只能返回 1,000 条记录。 这项控制措施可保护用户和服务不受会生成大型数据集的意外查询影响。 当客户尝试通过查询来按照能满足自己特定需求的方式查找和筛选资源时,这种情况最为常见。 这项控制措施不同于使用 top 或 limit Azure 数据资源管理器语言运算符来限制结果。
注意
使用 first
时,建议使用 asc
或 desc
按至少一个列对结果排序。 如果不排序,则返回的结果是随机的且不可重复。
通过与 Resource Graph 交互的所有方法,都可以替代默认限制。 下面的示例展示了如何将数据集大小限制更改为 200:
az graph query -q "Resources | project name | order by name asc" --first 200 --output table
Search-AzGraph -Query "Resources | project name | order by name asc" -First 200
在 REST API 中,控制措施是 $top
,它属于 QueryRequestOptions
。
最具限制性的控制措施将胜出。 例如,如果查询使用 top
或 limit
运算符,并生成多于 first
的记录,那么返回的记录数上限等于 first
。 同样,如果 top
或 limit
小于 first
,那么返回的记录集将是 top
或 limit
配置的较小值。
first
参数的最大允许值为 1000。
CSV 导出结果大小限制
使用 Azure Resource Graph 资源管理器的逗号分隔值 (CSV) 导出功能时,结果集限制为 55,000 条记录。 这是一个平台限制,不能通过提交 Azure 支持票证替换。
若要从 Azure 门户下载 CSV 结果,请浏览到 Azure Resource Graph 资源管理器并运行查询。 在工具栏上,选择“以 CSV 格式下载”。
跳过记录
下一个大型数据集处理选项是 skip
控制措施。 通过这项控制措施,查询可以在返回结果之前跳过或略过定义的记录数。 Skip
适用于以一种有意义的方式对结果进行排序的查询,查询意图是在结果集中间某位置处获取记录。 如果所需的结果位于返回数据集的末尾,更高效的做法是使用不同的排序配置,并从数据集顶部检索结果。
注意
使用 skip
时,建议使用 asc
或 desc
按至少一个列对结果排序。 如果不排序,则返回的结果是随机的且不可重复。 如果在查询中使用 limit
或 take
,则忽略 skip
。
下面的示例展示了如何跳过查询生成的前 10 条记录,改从第 11 条记录开始返回结果集:
az graph query -q "Resources | project name | order by name asc" --skip 10 --output table
Search-AzGraph -Query "Resources | project name | order by name asc" -Skip 10
在 REST API 中,控制措施是 $skip
,它属于 QueryRequestOptions
。
分页结果
如果有必要将结果集拆分为更小的记录集进行处理,或者因为结果集会超过允许的最大返回记录数(即 1000 条),请使用分页。 REST API QueryResponse
提供指示结果集已拆分的值:resultTruncated
和 $skipToken
。 resultTruncated
是布尔值,用于告知使用者返回的响应中是否还有其他记录。 如果 count
属性小于 totalRecords
属性,也可确定此条件。 totalRecords
定义匹配查询的记录数。
如果以下原因导致了可用资源少于查询请求的资源、禁用了分页或无法进行分页,则 resultTruncated
为 true
:
- 查询包含
limit
orsample
/take
运算符。 - 所有输出列都是
dynamic
或null
类型。
如果 resultTruncated
为 true
,则不会设置 $skipToken
属性。
以下示例演示了如何使用 Azure CLI 和 Azure PowerShell 跳过前 3,000 条记录,返回这些跳过的记录之后的 first
1,000 条记录:
az graph query -q "Resources | project id, name | order by id asc" --first 1000 --skip 3000
Search-AzGraph -Query "Resources | project id, name | order by id asc" -First 1000 -Skip 3000
重要
在以下情况下响应不包括 $skipToken
:
- 查询包含
limit
orsample
/take
运算符。 - 所有输出列都是
dynamic
或null
类型。
有关示例,请转到 REST API 文档中的下一页查询。
设置结果的格式
Resource Graph 查询的结果以两种格式提供:Table
和 ObjectArray
。 可以使用作为请求选项一部分的 resultFormat
参数配置格式。 Table
格式是 resultFormat
的默认值。
默认情况下,来自 Azure CLI 的结果以 JSON 的形式提供。 Azure PowerShell 中的结果是 PSResourceGraphResponse
对象,但可以使用 data
属性上的 ConvertTo-Json
cmdlet 快速转换为 JSON。 对于其他 SDK,可以将查询结果配置为输出 ObjectArray
格式。
格式 - Table
默认格式 Table
以 JSON 格式返回结果,旨在突出显示查询所返回的属性的列设计和行值。 该格式与结构化表或电子表格中定义的数据很类似,其中首先标识列,然后标识表示与这些列相对应的数据的行。
下面是一个使用 Table
格式设置的查询结果示例:
{
"totalRecords": 47,
"count": 1,
"data": {
"columns": [
{
"name": "name",
"type": "string"
},
{
"name": "type",
"type": "string"
},
{
"name": "location",
"type": "string"
},
{
"name": "subscriptionId",
"type": "string"
}
],
"rows": [
[
"veryscaryvm2-nsg",
"microsoft.network/networksecuritygroups",
"chinaeast",
"11111111-1111-1111-1111-111111111111"
]
]
},
"facets": [],
"resultTruncated": "true"
}
格式 - ObjectArray
ObjectArray
格式也以 JSON 格式返回结果。 但是,这种设计与 JSON 中常见的键/值对关系保持一致,其中列和行数据在数组组中匹配。
下面是一个使用 ObjectArray
格式设置的查询结果示例:
{
"totalRecords": 47,
"count": 1,
"data": [
{
"name": "veryscaryvm2-nsg",
"type": "microsoft.network/networksecuritygroups",
"location": "chinaeast",
"subscriptionId": "11111111-1111-1111-1111-111111111111"
}
],
"facets": [],
"resultTruncated": "true"
}
查询超时
Azure Resource Graph 强制执行 30 秒的查询超时,与 Azure 资源管理器保持一致。
可能的解决方法:
- 使用较小的范围重试查询。 例如,查询较少的订阅。
- 使用
join
的查询应在join
左侧具有较小的结果集。
后续步骤
- 了解 Azure Resource Graph 查询语言的详细信息。
- 详细了解如何浏览资源。