ネストされた集計を使用すると、 NRQLクエリを完了し、そのクエリの結果を使用して追加の計算を行うことができます。ネストされた集約は、サブクエリが外部クエリのFROM
句にあるSQLサブクエリまたはサブセレクトのクラスと同様のNRQL機能を提供します。
ヒント
この機能は、 SELECT
およびWHERE
句でサブクエリを実行できるサブクエリ機能とは異なります。
ネストされた集約は、複数のクエリを構築することなく、このような質問に答えるのに役立ちます。
- 自分のアプリケーションの1分あたりのリクエスト数をカウントして、過去1時間の1分あたりの最大リクエスト数を取得するにはどうしたらいいですか?
- すべてのサーバーやホストの平均CPU使用率を計算して、使用率が90%以上のものだけをリストアップするにはどうしたらいいですか?
- すべてのユーザーセッションから、どのくらいの割合ですぐにバウンドしたかを把握するにはどうしたらいいでしょうか?
ネストされた集計クエリ構造
すべてのNRQLクエリは、 SELECT
ステートメントまたはFROM
句で始まる必要があります。ネストされた集計クエリは、 SELECT
ステートメントとFROM
句の両方を使用し、それらを1つまたは複数の括弧内に含まれるクエリに適用します。
完全で適切にフォーマットされたネストされた集計クエリは次のようになります。
SELECT function(attribute)
SELECT function(attribute)
クエリと句の動作について、他にもいくつかご紹介します。
- ネストされたクエリには 3 つ以上のレベルを含めることができます。
TIMESERIES
とFACET
の両方をネストされたクエリの任意の部分に適用できます。 すべてのレベルで同一である必要はありません。SINCE
、 UNTIL
、およびCOMPARE WITH
句はクエリ全体に適用され、最も外側のレベルでのみ使用できます。
ネストされた集計クエリの例
ネストされたクエリの例をいくつか示します。
この例では、最初に内側のクエリが過去 60 分間ごとにmyApp
のトランザクションをカウントし、次に外側のクエリが 1 分間の最高リクエスト レートを返します。
また、最初のクエリの結果 ( as rpm
) に名前を付けることで、返された値のラベルを作成できます。 ラベルを追加しないと、このクエリは外側のクエリで使用するカウントとして値を返します。
この例では、内側のクエリで全ホストの平均CPU使用率を計算し、外側のクエリでCPU使用率がリスクのあるしきい値(90%)を超えるホストのみに結果を絞り込みます。
SELECT average(cpuPercent) as cpu
この例では、内側のクエリで各ユーザー セッションのPageView
イベントの数を計算し、次に外側のクエリでそれらのセッションの何パーセントが関連付けられたビューを 1 つしか持っていないかを計算します。
SELECT percentage(count(*), WHERE sessionLength = 1)
SELECT count(*) as sessionLength
この例では、内部クエリは、平均トランザクション時間が最も遅い上位のエンティティ guid を検索します。次に、外側のクエリは、それらのクエリのうちしきい値より遅いクエリがいくつあるかを見つけます。ここで、クエリは上位 50 のクエリを選択し、1 秒の期間しきい値に対して測定します。
SELECT count(avgDurations)
SELECT average(duration) AS avgDurations
この例には、2 つのネストされた集計があります。最も内側のクエリは、各ホストの 1 時間あたりの平均diskWritesPerSecond
を見つけます。次のクエリは各ホストの最大平均を見つけ、最も外側のクエリはそれらの最大値の 50、75、および 99 パーセンタイルを計算します。
SELECT percentile(avgMaxWrites, 50, 75, 99)
SELECT max(avgWrites) AS avgMaxWrites
SELECT average(diskWritesPerSecond) as avgWrites