大規模な 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
または limit
が first
より小さい場合、返されるレコード セットは、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 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
の 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
の左側の結果セットが、より少なくなる必要があります。
次のステップ
- 「Azure Resource Graph クエリ言語の概要」の詳細を確認します。
- リソースを探索する方法について詳しく確認します。