大規模な Azure リソース データ セットの処理

Azure Resource Graph は、Azure 環境内にあるリソースを操作し、リソースに関する情報を取得することを目的に設計されています。 Resource Graph を使用すると、数千レコードのクエリを実行する場合でも、このデータの取得が高速になります。 Resource Graph には、これらの大きなデータ セットを操作するための複数のオプションがあります。

高頻度のクエリの操作に関するガイダンスについては、スロットルされた要求に関するガイダンスのページを参照してください。

データ セットの結果のサイズ

既定では、Resource Graph ではどのクエリも 1000 個のレコードしか返さないように制限されます。 このコントロールにより、ユーザーとサービスの両方が、大規模なデータ セットになる意図しないクエリから保護されます。 このようなことが最もよく発生するのは、ユーザーが自分の特定のニーズに合った方法でリソースの検索とフィルター処理を行うクエリを実験しているときです。 このコントロールは、Azure Data Explorer 言語の top または limit 演算子を使用して結果を制限する場合とは異なります。

Note

First を使用するときは、asc または desc を使って、少なくとも 1 つの列を基に結果を並べ替えることをお勧めします。 並べ替えを行わないと、返される結果がランダムになり、反復可能ではなくなります。

既定の制限は、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 または limitFirst より小さい場合は、返されるレコード セットは top または limit で構成されている小さい方の値になります。

First パラメーターで許可される最大値は 1000 です。

CSV エクスポートの結果サイズの制限

Azure Resource Graph エクスプローラーのコンマ区切り値 (CSV) エクスポート機能を使用すると、結果セットは 55,000 レコードに制限されます。 これはプラットフォームの制限であり、Azure サポート チケットを提出してもオーバーライドできません。

Azure portal から CSV の結果をダウンロードするには、Azure Resource Graph エクスプローラーを参照してクエリを実行します。 ツール バーの [CSV としてダウンロード] をクリックします。

レコードのスキップ

大規模なデータ セットを操作するための次のオプションは、Skip コントロールです。 このコントロールをクエリで使用すると、結果を返す前に定義されている数のレコードをスキップできます。 Skip は、結果セットの中間にあるレコードを取得することを目的として、意味のある方法で結果を並べ替えるクエリに便利です。 必要な結果が返されるデータ セットの末尾にある場合は、異なる並べ替え構成を使用し、代わりにデータ セットの先頭から結果を取得する方が効率的です。

Note

Skip を使用するときは、asc または desc を使って、少なくとも 1 つの列を基に結果を並べ替えることをお勧めします。 並べ替えを行わないと、返される結果がランダムになり、反復可能ではなくなります。 クエリで 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 APIQueryResponse では、結果セットが分割されていることを示す値として、resultTruncated$skipToken が提供されています。 resultTruncated はブール値で、応答で返されていない追加のレコードがあるかどうかをコンシューマーに通知します。 この状態は、count プロパティが totalRecords プロパティより小さい場合も示されます。 totalRecords では、クエリに一致したレコード数が定義されています。

使用可能なリソースがクエリで要求されている量に満たない場合、または次の理由でページングができない場合、resultTruncatedtrue です。

  • クエリに limit または sample/take 演算子が含まれている。
  • すべての出力列が dynamic 型またはnull 型である。

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 が含まれません。

  • クエリに limit または sample/take 演算子が含まれている。
  • すべての出力列が dynamic 型またはnull 型である。

例については、REST API のドキュメントの「Next page query (次のページのクエリ)」をご覧ください。

結果の書式設定

Resource Graph クエリの結果は TableObjectArray の 2 つの形式で提供されます。 この形式は、要求オプションの一部として resultFormat パラメーターを使用して構成されます。 Table 形式は resultFormat の既定値です。

既定では、Azure CLI の結果は JSON で提供されます。 Azure PowerShell の結果は PSResourceGraphResponse オブジェクトですが、 [データ] プロパティで ConvertTo-Json コマンドレットを使用してすばやく 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"
}

次のステップ