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

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

高頻度でのクエリの操作に関するガイダンスは、「スロットルされた要求に関するガイダンス」にアクセスしてください。

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

既定では、Resource Graph はクエリで 1,000 レコードのみを返すように制限されています。 このコントロールにより、ユーザーとサービスの両方が、大規模なデータ セットになる意図しないクエリから保護されます。 このようなことが最もよく発生するのは、ユーザーが自分の特定のニーズに合った方法でリソースの検索とフィルター処理を行うクエリを実験しているときです。 このコントロールは、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 では、クエリに一致するレコード数が定義されています。

resultTruncated は、クエリが要求しているリソースよりも使用可能なリソースが少ない場合、またはページングが無効な場合、または次の理由でページングが不可能な場合に true になります。

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

resultTruncatedtrue の場合、$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 クエリの結果は、TableObjectArray の 2 つの形式で提供されます。 この形式は、要求オプションの一部として、resultFormat パラメーターを使用して構成されます。 Table 形式は、resultFormatの既定値です。

既定では、Azure CLI の結果は JSON で提供されます。 Azure PowerShell での結果は PSResourceGraphResponse オブジェクトですが、data プロパティ上の 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"
}

クエリのタイムアウト

Azure Resource Graph では、Azure Resource Manager に合わせて 30 秒のクエリ タイムアウトが適用されます。

考えられる解決策:

  • より小さいスコープを使用してクエリをもう一度試します。 たとえば、より少ないサブスクリプションにクエリを実行します。
  • join を使用するクエリでは、joinの左側の結果セットが、より少なくなる必要があります。

次のステップ