NerdGraph を使用して NRQL クエリを実行できます。さらに、NerdGraph を使用して非同期 NRQL クエリを実行することもできます。非同期クエリはバックグラウンドで実行され、フォローアップ リクエストを作成して、クエリ結果またはクエリ ステータスを取得できます。このタイプのクエリは、ブラウザのタイムアウトや HTTP 接続のタイムアウトなどの問題によってクエリが中断されるのを回避します。これは、完了までに長い時間がかかるクエリを実行する場合に特に便利です。
要件
Data Plusをお持ちの場合は、NerdGraph またはクエリ ビルダー UI を使用して、最大 10 分間の非同期クエリを実行できます。
クエリ制限の詳細については、 「クエリ制限」を参照してください。
非同期クエリの例
これは、非同期クエリのNerdGraph呼び出しの例です。async: true
は、クエリを非同期にするものです。このクエリは、デフォルトのタイムアウトである5秒以内に完了すると、結果を返します。それ以外の場合は、 nrqlQueryProgress
フィールドへのフォローアップクエリで使用するためにqueryProgress
データを返します。
{ actor { account(id: YOUR_ACCOUNT_ID) { nrql(query: "SELECT * FROM Transaction", async: true) { results queryProgress { queryId completed retryAfter retryDeadline resultExpiration } } } }}
非同期クエリの結果またはステータスを取得する
クエリがデフォルトのタイムアウトを超えると、クエリIDが返されます。そのIDを取得し、2番目のクエリを実行して、クエリ結果(終了している場合)、またはそのクエリのステータスを取得できます。
{ actor { account(id: YOUR_ACCOUNT_ID) { nrqlQueryProgress(queryId: "YOUR_QUERY_ID") { results queryProgress { queryId completed retryAfter retryDeadline resultExpiration } } } }}
このクエリに関するいくつかの重要な詳細:
queryId
は、元の非同期クエリによって返されたqueryProgress
データから取得されます。account
引数は、元のクエリのaccount
引数と一致する必要があります。- このクエリは、非同期実行が完了した場合に結果を返します。それ以外の場合は、
queryProgress
データを返します。 - 結果またはエラーが返されるまで、クエリを逐語的に繰り返すことができます。
非同期クエリをキャンセルする
cancelAsyncQuery
ミューテーションを使用して非同期クエリをキャンセルできます。 このミューテーションは、キャンセルするクエリのqueryId
を取得します。
mutation { cancelAsyncQuery(queryId: "YOUR_QUERY_ID") { queryToken accepted rejectionCause }}