New Relic 内に保存されているデータの多くは、他のデータ ( Transaction
と TransactionError
、 PageView
と PageAction
、 Log
、インフラストラクチャ イベントなど) に関連しています。これで、最終的にサブクエリ結合を使用して分析を実行し、これらのイベント間の相関関係を計算できるようになります。
サブクエリ結合の基本
サブクエリは 、別のクエリ内にネストされたクエリです。サブクエリ結合を使用すると、キーに基づいてサブクエリの結果とその外部クエリの結果を組み合わせることができ、データセット全体の分析と強化が可能になります。
サブクエリ結合の例
インフラストラクチャ データとトランザクション データを結合する次の例を考えてみましょう。
この例には、インフラストラクチャ コンテナー (ProcessSample
) の平均 CPU パーセンテージと、コンテナーごとのアプリ トランザクションの平均継続時間という 2 つのデータセットがあります。多くの場合、異なるソースからのデータは相互に関連付けられます。この場合、次のサブクエリ結合を使用して、コンテナーの CPU 使用率の上昇がトランザクションの速度低下の原因となっているかどうかを判断できます。
FROM Transaction JOIN (FROM ProcessSample SELECT average(cpuPercent) AS cpu FACET containerId LIMIT MAX) ON containerIdSELECT average(duration)/latest(cpu) FACET containerId, containerName
このクエリを使用すると、CPU 使用率を考慮して平均トランザクション時間が長いコンテナーを確認し、異常値を調査して修正すべきバグや最適化が必要かどうかを確認できます。
サブクエリ結合の書き方
サブクエリ結合には、2 つのデータセットと、2 つをリンクする主キーという 3 つのコンポーネントが必要です。
FROM Event [INNER|LEFT] JOIN (subquery) ON [key =] key SELECT ...
構文にはいくつかの簡単なルールがあります。
- JOIN 句は常に FROM 句の直後に置く必要があります。
- JOIN には、結合タイプを接頭辞として付けることができます。INNER または LEFT はオプションであり、省略した場合のデフォルトは INNER です。
- サブクエリを含む括弧は JOIN 句の直後に置く必要があります。
- ON 句はサブクエリの直後に置く必要があり、2 つの形式があります (詳細は以下を参照)。
制限
- 結合されたサブクエリのデフォルトの
LIMIT
は引き続き 10 で、最大LIMIT
は 2000 です。外側のクエリのLIMIT
内側のクエリに影響を与えないことに注意してください。 - 結合サブクエリでの
TIMESERIES
の使用はサポートされていません。外側のクエリでTIMESERIES
を使用する場合、結合されたサブクエリはクエリのタイムスパン全体にわたって 1 つの結果を提供することに注意してください。 - 結合サブクエリでの
COMPARE WITH
の使用はサポートされていません。外側のクエリでCOMPARE WITH
を使用する場合、結合されたサブクエリはクエリの基本タイムスパンに基づいて単一の結果を提供し、タイムスパンと比較する外側のクエリに別の値を提供しないことに注意してください。 - すべてのサブクエリと同様に、結合されたサブクエリはアラート条件では使用できません。
- SELECT * は親クエリではサポートされていますが、結合されたサブクエリではサポートされていません。
- 結合のカーディナリティは 1:100 に制限されています。つまり、1 つの結合キーはサブクエリ結果の 100 を超える行にマップできません。
- ON 句は等価条件のみをサポートします。
- JOIN キーは、メトリック値のような複雑な属性にすることはできません。
- JOIN 条件では属性タイプの強制は行われません。JOIN の ON 条件の左側は、ON 条件の右側と同じ型である必要があります。
- メトリックのワイルドカードは、JOIN の ON 条件ではサポートされません。
- サブクエリをメトリクスの行単位のクエリにすることはできません。
- JOIN の ON 条件の右側は、クエリによって投影された識別子である必要があります。関数や算術演算は使用できません。
- 結合されたサブクエリは
uniques()
結果を投影できません。
サブクエリ結合の例
サブクエリ結合の例をいくつか示します。