使用大型 Azure 資源資料集

Azure Resource Graph 是設計來使用和取得 Azure 環境中資源的相關資訊。 即使在查詢數千筆記錄時,Resource Graph 還是能夠快速取得此資料。 Resource Graph 有數個選項可用來使用這些大型資料集。

如需以較高頻率處理查詢的指引,請參閱節流要求指引

資料集結果大小

根據預設,Resource Graph 會將所有查詢都限制為只傳回 1000 筆記錄。 此控制項可保護使用者和服務,以防止會產生大型資料集的非預期查詢。 此事件大多會在客戶利用符合其特定需求的方式來實驗查詢以尋找並篩選資源時發生。 此控制項不同於使用 toplimit Azure 資料總管語言運算子來限制結果。

注意

使用 第一個時,建議至少依照一個具有 ascdesc 的資料行來排序結果。 若未排序,傳回的結果會是隨機的且不可重複。

預設限制可以透過與 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

「限制最嚴格」的控制項將會勝出。 例如,如果您的查詢會使用 toplimit 運算子並產生比 First 還多的記錄,則傳回的記錄數目上限會等於 First。 同樣地,如果 toplimit 小於 First,傳回的記錄集會是小於 toplimit 所設定的值。

First 參數的允許上限值為 1000

CSV 匯出結果大小限制

使用逗號分隔值 (CSV) 匯出 Azure Resource Graph Explorer 的功能時,結果集限制為 55,000 筆記錄。 此平台限制無法透過提出 Azure 支援票證予以覆寫。

若要從 Azure 入口網站下載 CSV 結果,請瀏覽至 Azure Resource Graph Explorer,並執行查詢。 在工具列上,按一下 [下載為 CSV]

略過記錄

使用大型資料集的下一個選項是 Skip 控制項。 此控制項可讓查詢先跳過或略過所定義的記錄數目,然後再傳回結果。 Skip 適用於以有意義的方式排序結果的查詢,其目的是取得位於結果集中間某處的記錄。 如果所需的結果位於所傳回資料集的結尾處,則使用不同的排序設定,並改為從資料集頂端擷取結果會更有效率。

注意

使用 Skip時,建議至少依照一個具有 ascdesc 的資料行來排序結果。 若未排序,傳回的結果會是隨機的且不可重複。 如果查詢中使用 limittake,則會忽略 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 APIQueryResponse 會提供值來表示已將結果集分解:resultTruncated$skipTokenresultTruncated 是布林值,可通知取用者,表示回應中還有其他記錄未傳回。 在 count 屬性小於 totalRecords 屬性時,也可識別出此條件。 totalRecords 會定義符合查詢的記錄筆數。

當下列原因造成可用資源少於查詢所要求的資源、分頁停用或無法分頁時,resultTruncatedtrue

  • 查詢包含 limitsample/take 運算子。
  • 所有輸出資料行都是 dynamicnull 類型。

resultTruncatedtrue 時,不會設定 $skipToken 屬性。

下列範例使用 Azure CLI 和 Azure PowerShell,示範如何略過前 3000 筆記錄,並在略過這些記錄之後,傳回 1000 筆記錄:

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

  • 查詢包含 limitsample/take 運算子。
  • 所有輸出資料行都是 dynamicnull 類型。

如需範例,請參閱 REST API 文件中的下一頁查詢

格式化結果

Resource Graph 查詢的結果會以兩種格式提供:TableObjectArray。 格式會使用 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"
}

下一步