使用大型 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 匯出結果大小限制
使用逗號分隔值 (CSV) 匯出 Azure Resource Graph Explorer 的功能時,結果集限制為 55,000 筆記錄。 此限制為平台限制,無法透過提出 Azure 支援票證予以覆寫。
若要從 Azure 入口網站下載 CSV 結果,請瀏覽至 Azure Resource Graph Explorer 並執行查詢。 在工具列中選取 [下載為 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
或sample
/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
或sample
/take
運算子。 - 所有輸出資料行都是
dynamic
或null
類型。
如需範例,請前往 REST API 文件中的下一頁查詢。
格式化結果
Resource Graph 查詢的結果會以兩種格式提供:Table
和 ObjectArray
。 格式會使用 resultFormat
參數來設定為要求選項的一部分。 Table
格式是 resultFormat
的預設值。
預設會以 JSON 提供來自 Azure CLI 的結果。 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",
"eastus",
"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": "eastus",
"subscriptionId": "11111111-1111-1111-1111-111111111111"
}
],
"facets": [],
"resultTruncated": "true"
}
查詢逾時
Azure Resource Graph 會強制執行與 Azure Resource Manager 一致的查詢逾時 30 秒。
可能的解決方案:
- 使用較小的範圍重試查詢。 例如,查詢較少的訂用帳戶。
- 使用
join
的查詢在join
左側應該會有較小的結果集。
下一步
- 深入了解了解 Azure Resource Graph 查詢語言。
- 深入了解如何探索資源。