NRQL を使用すると、別のクエリ内にネストされたクエリであるsubqueryを実行できます。 サブクエリは、別のクエリ内にネストされた 1 つのクエリです。サブクエリを使用すると、あるクエリの結果を別のクエリで使用できます。 サブクエリを使用すると、次のことが可能になります。
- 親エンティティの子エンティティで計算を実行します
- インフラストラクチャエージェントのCPU使用率に基づいて、CPU負荷が高いホストのエラーログを参照してください
NRQL では、 SELECT
ステートメントとWHERE
句でサブクエリを使用できます。
平均以上の期間のトランザクションの数を取得するためのクエリの例を次に示します。
SELECT count(*) FROM Transaction WHERE duration > (SELECT average(duration) FROM Transaction)
サブクエリの結果は、コンテキストで意味をなす必要があります。上記の例では、 WHERE
句の大なり条件には、単一の値を返すサブクエリが必要です。一連の値を返すサブクエリ ( uniques()
サブクエリなど) は失敗します。
1 つのサブクエリを別のサブクエリの中にネストすることもできます。 NRQL では、単一のクエリ内で、ネストされているかどうかに関係なく、最大 3 つのサブクエリが許可されます。
SINCE
/ UNTIL
で明示的に指定しない限り、サブクエリの時間範囲は外側のクエリの時間範囲と同じになります。 ダッシュボードでタイムピッカーからウィンドウを選択すると、サブクエリの時間範囲が外側のクエリの時間範囲に合わせられます。 そのチャートにIgnore Time Pickerを設定した場合、サブクエリの時間範囲と外側のクエリの時間範囲は同じになりません。
サブクエリの実行
クエリの実行中、各サブクエリは独立して実行され、その結果は外部クエリの定数値または値のセットとして使用されます。 この実行モデルにより、サブクエリは外部クエリの属性と値を参照できない場合があります。
クエリ期間の制限は、サブクエリを含むクエリに対して適用されます。これは、すべてのサブクエリと外部クエリが期間制限内に実行を完了する必要があることを意味します。
サブクエリが返す結果の最大数は、 LIMIT MAX
値と同じ 5,000 です。 この制限を超えると、結果が不完全になり、エラーメッセージ「サブクエリが結果メンバーの最大制限に達した可能性があるため、不完全な結果が発生する可能性があります。」が表示される可能性があります。
サブクエリとネストされた集計
サブクエリは似ているように見えますが、ネストされたクエリの結果を集計できるネストされた集計とは異なります。 ネストされた集計はFROM
句で使用され、サブクエリはSELECT
ステートメントとWHERE
句で使用されます。
制限
- サブクエリは、 NRQLアラート条件またはイベント メトリック (E2M) ルールではサポートされていません。 サブクエリを含むクエリではデータを複数回渡す必要があるため、サブクエリはストリーミング アラートやストリーミング データ処理に基づくその他の製品と互換性がありません。
- クエリが複数の結果セットを返す原因となる
TIMESERIES
句とCOMPARE WITH
句は、サブクエリではサポートされていません。 - サブクエリは
FACET
句には表示できませんが、FACET CASES
で使用されるWHERE
句には表示できます。 - 結果の数に制限があります
サブクエリの例
サブクエリの例を次に示します。