優れたNRQLクエリを記述するには、当社のさまざまなNRQL句と関数がどのように機能するかを理解すると有益です。このドキュメントには、NRQL句と関数の定義、およびその使用方法の例が記載されています。
基本的なNRQL構文ルールをお探しですか? NRQLの使用方法を参照してください。チュートリアルについては、NRQL入門チュートリアルを参照してください。
New Relicを初めて使用する方で、NRQLの使用がいかに簡単かを確認したい場合は、無料のプラットフォームで、チュートリアルに従いながら開始できます。するべきことは、以下のとおりです。
まだ作成されていない場合は、無料のNew Relicアカウントを以下で作成し、今すぐデータの監視を開始してください。
当社のエージェントとインテグレーションを使用して、共通のフレームワークとツールから自動的にデータを収集します。
New Relicの設定方法の推奨パスについては、クイック起動ガイドを参照してください。クエリするデータの取り込みを開始し、本チュートリアルまたは当社のいずれかのチュートリアルを使用して準備できます。
クエリの構成要素
基本的なNRQL構文ドキュメントに記載されているように、すべてのNRQLクエリにはSELECT
句とFROM
句が含まれています(他の句はすべてオプション)。以下の句の定義には、NRQLクエリの例も含まれます。
必要な句
SELECT attribute ...
SELECT function(attribute) ...
SELECT
は、属性または関数を指定することによって、データ型のどの部分をクエリするかを指定します。その後、カンマ区切りの1つ以上の引数が続きます。各引数では、以下を実行できます。
- ワイルドカードとして
*
を使用することで、利用可能なすべての属性値を取得。例:SELECT * from Transaction
。 - 指定した属性、または カンマ区切りのリストで指定した複数の属性に関連する値を取得。
- 集計関数を選択することで、指定した属性から集計値を取得。
AS
句で、各引数で返された結果にラベル付け。
基本的な数学関数とともにSELECT
を使用することもできます。
このクエリは、直近1週間の平均応答時間を返します。
SELECT average(duration) FROM PageView SINCE 1 week ago
SELECT ... FROM data type ...
FROM
句を使用して、クエリするデータ型を指定します。クエリはFROM
またはSELECT
で開始できます。カンマ区切りのリストの複数のデータタイプにまたがる同じ属性の値をマージできます。
このクエリは、直近7日間のAPMトランザクションの全カウント数を返します。
SELECT count(*) FROM Transaction SINCE 7 days ago
このクエリは、直近3日間のAPMトランザクションとブラウザイベントの全カウント数を返します。
SELECT count(*) FROM Transaction, PageView SINCE 3 days ago
lookup()
をご覧ください。
オプション句
SELECT ... AS 'label' ...
AS
句を使用して、シングルクォート区切りの文字列で属性、集計、ファネル内のステップ、または数学関数の結果にラベルを付けます。このラベルは結果のチャートで使用されます。FACET
句が使用されている場合、時系列グラフのAS
句のラベルは表示されないことに注意してください。
このクエリはセッションごとのページ数を返します。
SELECT count(*)/uniqueCount(session) AS 'Pageviews per Session' FROM PageView
このクエリは、過去1週間でサイトのメインページと採用情報ページの両方を訪れた人の数を返します。
SELECT funnel(SESSION, WHERE name='Controller/about/main' AS 'Step 1', WHERE name = 'Controller/about/careers' AS 'Step 2') FROM PageView SINCE 1 week ago
SELECT ... (SINCE or UNTIL) (integer units) AGO COMPARE WITH (integer units) AGO ...
COMPARE WITH
句を使用すると、2つの異なる時間範囲の値を比較できます。
COMPARE WITH
にはSINCE
またはUNTIL
文が必要です。COMPARE WITH
で指定された時間は、SINCE
またはUNTIL
で指定した時間に相対します。たとえば、SINCE 1 day ago COMPARE WITH 1 day ago
昨日を一昨日と比較します。
COMPARE WITH
値の時間範囲は、常にSINCE
またはUNTIL
で指定されたものと同じになります。たとえば、SINCE 2 hours ago COMPARE WITH 4 hours ago
は午後3時〜5時までと午前11時〜午後1時までを比較できます。
COMPARE WITH
結果は、折れ線グラフまたはビルボードで表示できます。
TIMESERIES
を使用すると、COMPARE WITH
は比較内容を経時的にマッピングした折れ線グラフを作成します。TIMESERIES
がない場合、COMPARE WITH
は現在値とCOMPARE WITH
値からの増減率でビルボードを生成します。
例:このクエリは、過去1週間の95パーセンタイルと1週間前の同じ範囲の比較を表示する折れ線グラフでデータを返します。最初は単一値、次は折れ線グラフです。
SELECT percentile(duration, 95) FROM PageView SINCE 1 week ago COMPARE WITH 1 week AGO
SELECT percentile(duration, 95) FROM PageView SINCE 1 week ago COMPARE WITH 1 week AGO TIMESERIES AUTO
重要
COMPARE WITH
を使用するFACET
クエリの場合、結果のファセットは、比較される前の時間範囲ではなく、SINCE
およびUNTIL
を使用して指定された時間範囲に基づいて選択されます。以前の時間範囲のみに対するFACET
クエリの結果には、別のファセットのセットが含まれる場合があります。
この句は以下のデータ型で使用できます。
Transaction
TransactionError
エージェントAPIで報告されたカスタムイベント
EXTRAPOLATE
の目的は、クエリ結果がシステム内のアクティビティ全体をより厳密に表現できるよう、イベントデータのAPMエージェントサンプリングの影響を数学的に補うことです。この句は、エージェントが非常に多くのイベントを報告し、収集サイクルの報告限度をしばしば超過する際に便利です。その場合、エージェントはイベントのサンプリングを開始します。
EXTRAPOLATE
に対応したNRQLクエリでこれを使用する場合、報告されたイベントと合計イベントの比率で、合計未サンプルデータの近似を推定します。この句に未対応であるか、サンプルデータを使用していないNRQLでこれを使用する場合、結果に影響を与えません。重要
EXTRAPOLATE
は、(スループットまたはエラー率など)同種データに対して最も有用である点に注意してください。(uniqueCount()
またはuniques()
など)特徴的なものの数を外挿する際には有効ではありません。この句は、以下のいずれかの集計関数を使用するNRQLクエリでのみ機能します。
apdex
average
count
histogram
sum
percentage
(引数として取る関数がEXTRAPOLATE
に対応している場合)rate
(引数として取る関数がEXTRAPOLATE
に対応している場合)stddev
interestingApplication
という名前のサービスの推定スループットを示すクエリ。SELECT count(*) FROM Transaction WHERE appName='interestingApplication' SINCE 60 minutes ago EXTRAPOLATEトランザクション名ごとに、時系列として表示する
interestingApplication
という名前のサービスの推定スループットを示すクエリ。SELECT count(*) FROM Transaction WHERE appName='interestingApplication'SINCE 60 minutes ago FACET name TIMESERIES 1 minute EXTRAPOLATE
SELECT ... FACET attribute ...
FACET
を使用すると、結果を属性値で分割してグループ化できます。たとえば、PageView
データでdeviceType
別にFACET
を行い、トラフィックの何割が携帯電話、タブレット、およびデスクトップデバイスから発生しているかを把握することができます。
LIMIT
句を使用して、表示するファセットの数を指定します(デフォルトは10)。より複雑なグループ化に関しては、FACET CASES
を使用します。FACET
句は、カンマで区切られた最大5つの属性をサポートします。
ファセットは、SELECT
句で指定した最初のフィールドの降順で並べ替えられます。2,000件以上のユニーク値を持つ属性をファセットに指定した場合、ファセット値のサブセットを選択し、それらをクエリタイプに従って並べ替えます。時系列グラフがデータを返さない場合(NRQLが一致するデータがない、無効なNRQLなど)、 FROM
句の最初のテーブルに一致するラベルを持つ平坦な線のみが表示されることに注意してください。
min()
、max()
、percentile()
、average()
、またはcount()
を選択すると、FACET
はこれらの関数を使用してファセットの選択方法とソート方法を決定します。その他の関数を選択すると、FACET
はファセット対象の属性の発生頻度に基づいて、ファセットの選択方法とソート方法を決定します。
このクエリは、ページビュー数が最も多い都市を表示します。このクエリは、都市ごとのページビューの合計数を使用してファセットの選択方法と並べ替え方法を決定します。
SELECT count(*) FROM PageView FACET city
このクエリは、最も多数のユニークURLにアクセスしている都市を表示します。このクエリは、特定の都市が結果に表れる合計回数を使用して、ファセットの選択方法と並べ替え方法を決定します。
SELECT uniqueCount(pageUrl) FROM PageView FACET city
高度なセグメンテーションやコホート分析では、バケット機能でファセットすることでデータをより効率的に分割することができます。
コホート分析は、タイムスタンプに基づいて結果をグループ化する方法です。指定範囲日時に対応するバケットに結果を分割することができます。
重要
関数を使用して属性値を集計する場合、クエリの最初の関数で集計される属性にnull以外の値が含まれていることを確認してください。ファセットは、最初の関数の属性のnull以外の値を含む行に対してのみ選択されます。
例:
FROM Event SELECT average(attribute) FACET name
名前は、nullでない属性の行からのみ選択されます。
次のクエリを実行して、関数で使用している属性にnull以外の値が含まれているかどうかを確認します。
FROM Event SELECT attribute, name WHERE attribute IS NOT NULL
FACET ... AS
句では、クエリでAS
キーワードを使用してファセットに名前を付けます。この句は、結果のファセットに明確な名前または簡略化された名前を追加するのに役立ちます。ネスト構造の集計クエリで、ファセットの名前を変更するためにも使用できます。
FACET ... AS
クエリでは、結果のファセット名が変更されますが(たとえば、テーブルのヘッダーとして表示される場合)、実際のファセット名自体は変更されません。
FROM Transaction SELECT count(*) FACET response.headers.contentType AS 'content type'
SELECT ... FACET CASES ( WHERE attribute operator value, WHERE attribute operator value, ... ) ...
FACET CASES
を使用して、FACET
で可能な範囲を超えた複雑な条件別にデータを取り出します。複数の条件はカンマ,
で区切ります。たとえば、PageViewデータをクエリして、1秒未満、1秒から10秒、10秒を上回るといったカテゴリにFACET CASES
を行うことができます。ケース内の複数の属性を組み合わせ、AS
セレクタでケースにラベルを付けることができます。データ点は、最大で1つのファセットケースに追加されます。つまり、一致する最初のファセットになります。
また、属性とともに時間関数を使用することもできます。また、OR
演算子を使用して、指定したどのケースにも一致しないファセット結果を表示することもできます。
SELECT count(*) FROM PageView FACET CASES (WHERE duration < 1, WHERE duration > 1 and duration < 10, WHERE duration > 10)
この例は、トランザクション名にlogin
が含まれる1つのバケットと、URLにlogin
が含まれ、かつカスタムアトリビュートがユーザーが有料ユーザーであったことを示すもう1つのバケットに結果をグループ化します。
SELECT count(*) FROM Transaction FACET CASES (WHERE name LIKE '%login%', WHERE name LIKE '%feature%' AND customer_type='Paid')
この例は、結果に人間が読める名前をつけるためにAS
セレクタを使います。
SELECT count(*) FROM Transaction FACET CASES (WHERE name LIKE '%login%' AS 'Total Logins', WHERE name LIKE '%feature%' AND customer_type='Paid' AS 'Feature Visits from Paid Users')
この例では、OR
演算子を使用して、どのケースにも一致しないファセット結果を表示しています。
SELECT count(*) FROM Transaction FACET CASES (WHERE name LIKE '%login%', WHERE name LIKE '%feature%' AND customer_type='Paid') OR name
NRQLでは、デフォルトはSELECT
句の最初の集計で、クエリ内のファセットの選択をガイドします。FACET ... ORDER BY
では、ORDER BY修飾子で集計関数を追加し、ファセットの選択方法を指定することで、このデフォルト動作をオーバーライドできます。具体的には、LIMIT
句によって制限される前に、最終結果に含めるファセットの優先度をオーバーライドします。この句はクエリで使用できますが、アラートやストリーミングには使用できません。
この例では、FACET ... ORDER BY
を使用してアプリトランザクションの平均期間を見つける方法を示し、応答サイズが最大のアプリによる上位10(デフォルトの制限)の最大期間を示しています。この場合、FACET ... ORDER BY
が使用されていない場合、クエリ結果には、アプリの選択とは関係のない応答サイズで、期間が最も長い上位10件が代わりに表示されます。
FROM Transaction SELECT average(duration) TIMESERIES FACET appName ORDER BY max(responseSize)
FACET ... ORDER BY
句を使用する場合、ASC
修飾子とDESC
修飾子を追加して、並べ替え順序を変更することはできません。デフォルトでは、この句はDESC
を使用します。
ヒント
LIMIT
句が適用される前に操作が実行されるため、FACET ... ORDER BY
は、最終的なクエリ結果の種類に影響を与えません。これは、非時系列クエリの結果で特に顕著になります。
重要
この場合のORDER BY
修飾子は、ORDER BY
句とは機能が異なります。FACET attribute1 ORDER BY attribute2
の形式に従うクエリを構文解析する場合、New RelicはこれらのクエリをFACET ... ORDER BY
クエリとして読み取りますが、ORDER BY
がFACET
の直後に表示される場合に限定されます。それ以外の場合、ORDER BY
はNew Relicによって句として解釈されます。
JOIN
句を使用して、1つのイベントタイプのデータを共通の属性またはキーに基づくサブクエリの結果と結合します。
FROM Event [INNER|LEFT] JOIN (SELECT... FROM...) ON [key =] key SELECT ...
サブクエリ結合には、簡単なルールがいくつかあります。
JOIN
句は、常にFROM
句の直後に置く必要があります。- 結合タイプ(
INNER
またはLEFT
)の接頭辞はオプションです。省略した場合、結合タイプはデフォルトでINNER
になります。 - サブクエリを含む括弧は、
JOIN
の直後に置く必要があります。 ON
句はサブクエリの直後に置く必要があります。
結合タイプ | |
---|---|
| 結果には、結合されたサブクエリの結果に一致する値を持つ、外部クエリの値のみが含まれます。これはデフォルトの結合タイプです。 |
| 結果には、結合されたサブクエリと一致しない外部クエリのイベントが含まれます。 |
結合 | |
---|---|
| サブクエリと外部クエリで比較するキーの値を定義します。使用できる唯一の比較演算子は等価です。
|
| これは、キー識別子が両方のコンテキストで同じ場合の簡略構文です。 |
考慮すべき制限事項:
- 結合されたサブクエリのデフォルトの
LIMIT
は10で、最大LIMIT
は2000です。外部クエリのLIMIT
は内部クエリに影響を及ぼしません。 - 結合サブクエリでの
TIMESERIES
の使用はサポートされていません。外部クエリでTIMESERIES
を使用する場合、結合されたサブクエリはクエリの全期間に単一の結果を提供することに注意してください。 - すべてのサブクエリと同様に、結合されたサブクエリはアラート条件では使用できません。
- SELECT *は親クエリでサポートされていますが、結合されたサブクエリではサポートされていません。
- 結合のカーディナリティは1:100に制限されています。つまり、1つの結合キーはサブクエリ結果の100行以上にマップできません。
JOIN句の詳細については、NRQLサブクエリ結合チュートリアルを参照してください。
このクエリは、PageView
イベントタイプのbrowserTransactionName
によってファセットされたイベント数を検索し、次にPageAction
イベントタイプのcurrentUrl
によってファセットされたイベント数を検索します。これにより、共通のsession
属性値に基づいて2つのイベントタイプが結合されます。
FROM PageViewJOIN (FROM PageAction SELECT count(*) FACET session, currentUrl) ON sessionSELECT count(*) FACET browserTransactionName, currentUrl
ファセットINNER JOIN
の例
この例では、ファセットINNER JOIN
の例と同じデータをクエリしますが、LEFT JOIN
クエリとして、結果にはPageAction
サブクエリの結果に一致するsession
値を持たない項目がPageView
テーブルに含まれます。
FROM PageViewLEFT JOIN (FROM PageAction SELECT count(*) FACET session, currentUrl) ON sessionSELECT count(*) FACET browserTransactionName, currentUrl
ファセットLEFT JOIN
の例
ここでは、非集計の行単位サブクエリを実行します。外部クエリでは、PageAction
イベントタイプのcurrentUrl
によってファセットされたイベント数を検索し、次にPageView
イベントタイプのbrowserTransactionNamed
によってファセットされたイベント数を検索します。これにより、共通のsession
属性値に基づいて2つのイベントタイプが結合されます。
session
値34d5ce6acf4c60be
には、サブクエリのPageView
イベントタイプからの2つのbrowserTransactionName
値があり、結果に行が追加されます。
FROM PageActionleft JOIN (FROM PageView SELECT session, browserTransactionName LIMIT MAX) ON sessionSELECT count(*) FACET session, currentUrl, browserTransactionName LIMIT MAX
非集計INNER JOIN
の例
SELECT ... LIMIT count ...
LIMIT
句を使用して、FACET
クエリで返されるファセット値の最大数、またはSELECT *
クエリで返される項目の最大数を制御します。この句は、単一の整数値を引数に取ります。LIMIT
句が指定されない、または値が提供されない場合、リミットのデフォルト設定は、FACET
クエリの場合は10、SELECT *
クエリの場合は100となります。
LIMIT
句で許容される最大値は2,000です。
このクエリはセッション数上位20カ国を表示し、各国のWindowsユーザー限定でレスポンスタイムの95パーセンタイルを提供します。
SELECT uniqueCount(session), percentile(duration, 95) FROM PageView WHERE userAgentOS = 'Windows' FACET countryCode LIMIT 20 SINCE YESTERDAY
SELECT ... LIMIT count OFFSET count ...
OFFSET
句とLIMIT
句を使用して、SELECT *
またはSELECT column
クエリによって返される行の一部を制御します。LIMIT
句と同様に、OFFSET
は引数として単一の整数値を取ります。OFFSET
は、クエリで選択された行が返される前に、スキップされる行数を設定します。これはLIMIT
によって制約されます。
OFFSET
行はスキップされ、直近のレコードから開始されます。
たとえば、クエリSELECT interestingValue FROM Minute_Report LIMIT 5 OFFSET 1
は、最新の値を除き、Minute_Report
から最後の5つの値を返します。
ORDER BY
句を使用すると、行別にイベント属性を選択するクエリでクエリ結果を並べ替える方法を指定できます。
このクエリは、2つの特定のトランザクション属性を期間別に並べ替えます。
FROM Transaction SELECT appName, duration ORDER BY duration
デフォルトの並べ替え順序は昇順ですが、ASC
またはDESC
の修飾子を追加することで変更できます。
このクエリは、すべてのトランザクション属性を期間別の降順に並べ替えます。
FROM Transaction SELECT * ORDER BY duration DESC
重要
ORDER BY
句はFACET
クエリには適用されません。ファセット選択の指針となるFACET ... ORDER BY
句と混同しないでください。詳細については、FACET ... ORDER BY
を参照してください。
SHOW EVENT TYPES...
SHOW EVENT TYPES
は、特定の時間範囲内にアカウントに存在するすべてのデータ型のリストを返します。これは、SELECT
の代わりにクエリの最初の句として使用されます。
重要
この文脈において、「イベントタイプ」はNRQLクエリでアクセス可能なデータ型を指します。
このクエリは、直近1日のすべてのデータ型を返します。
SHOW EVENT TYPES SINCE 1 day ago
SELECT ... SINCE [numerical units AGO | phrase] ...
デフォルト値は 1 時間前です。
SINCE
句を使用して、返されたデータに対する時間範囲の包括的な開始を定義します。タイムゾーンは結果ではなく、クエリに対して指定できます。NRQLの結果はシステム時間に基づきます。
NRQLを使用する場合、UTCタイムスタンプまたは相対時間範囲を設定できます。
タイムスタンプは
YYYY-MM-DD HH:MM:SS ZZZZ
の形式を使用します。例えば:FROM Transaction SELECT count(*) SINCE '2021-12-25 00:00:00 +0000' UNTIL '2021-12-25 23:59:59 +0000'当社は、以下の相対時間範囲をサポートしています:
YESTERDAY
、TODAY
、SUNDAY
、MONDAY
、TUESDAY
、WEDNESDAY
、THURSDAY
、FRIDAY
、SATURDAY
。例、SINCE YESTERDAY UNTIL NOW
。また、
YEAR
、QUARTER
、MONTH
、WEEK
、DAY
、HOUR
、MINUTE
、SECOND
もサポートしています。この場合、SINCE
をTHIS
またはLAST
と組み合わせることができます。たとえば、SINCE LAST MONTH UNTIL THIS WEEK
。SINCE 3 WEEKS AGO UNTIL 10 MINUTES AGO
のように、AGO
を含めることもできます。
UNTILも参照してください。
SLIDE BY
句は、スライディングウィンドウと呼ばれる機能をサポートしています。スライディングウィンドウを使用すると、SLIDE BY
データは、互いに重複する時間の「ウィンドウ」に収集されます。これらのウィンドウは、移動集計(移動平均など)が狭い時間枠からの集計よりも重要である場合に、変動の多い折れ線グラフを滑らかにするのに役立ちます。
SLIDE BY
を使用するには、TIMESERIES
句の後のクエリにこの句を配置します。たとえば、このクエリは1分のSLIDE BY
間隔で5分間のウィンドウにデータをプルします。つまり、各ウィンドウは5分間続きますが、ウィンドウ1は0分後に開始し、ウィンドウ2は1分後に開始し、ウィンドウ3は2分後に開始します。
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY 1 minute
SLIDE BY
をいつ、どのように使用できるかについての詳細は、スライディングウィンドウを使用してよりスムーズなグラフを作成するを参照してください。または、この短いビデオをご覧ください(約3分20秒)。
スライディングウィンドウは、MAX
またはAUTO
と組み合わせて使用できます。ただし、MAX
またはAUTO
をTIMESERIES
とSLIDE BY
の間に配置することはできません。
このクエリは、SLIDE BY
ウィンドウ間隔を自動的に決定します。
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY AUTO
このクエリはSLIDE BYウィンドウを最高間隔粒度に設定します。
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY MAX
重要
AUTO
またはMAX
によって決定されるSLIDE BY
値は、ウィンドウサイズよりも大きいステップ間隔を生成する可能性があり、ギャップや予期しない結果を引き起こす可能性があります。
SELECT ... TIMESERIES integer units ...
TIMESERIES
句を使用して、指定期間単位の時系列としてデータを返します。TIMESERIES
は特定のチャートを表示するために使用されるため、デフォルト値はありません。
時間範囲を指定するには、integer units
を使用します。例:
TIMESERIES 1 minute
TIMESERIES 30 minutes
TIMESERIES 1 hour
TIMESERIES 30 seconds
TIMESERIES
以下の例に示すように、MAX
、AUTO
、SLIDE BY
などの引数と組み合わせると、クエリ結果をさらに調整できます。
重要
average()
またはpercentile()
などの関数では、集計ウィンドウを大きく設定することで、外れ値に対して大幅なスムージング効果が得られます。これは、クエリがスライディングウィンドウを使用するかどうかに関係なく当てはまります。
指定された値は、グラフを分割する単位を示します。たとえば、以下のようにして1日のグラフを30分刻みで表示します。
SELECT ... SINCE 1 day AGO TIMESERIES 30 minutes
TIMESERIES
はAUTO
に設定することもでき、これによってグラフが適切な数の区分に分割されます。たとえば、1日のチャートは30分間隔で分割され、1週間のチャートは6時間間隔で分割されます。
このクエリは、6時間間隔のデータ点で、1週間のクライアントサイドのトランザクションタイムの50パーセントタイルと90パーセンタイルを示す折れ線グラフを返します。
SELECT average(duration), percentile(duration, 50, 90) FROM PageView SINCE 1 week AGO TIMESERIES AUTO
TIMESERIES
をMAX
に設定することで時間枠が自動的に調整され、指定された期間に許可された間隔数を最大にできます。これによって、TIMESERIES
バケットを手動で更新することなく時間枠を更新でき、認められた最大インターバル数に時間枠を分割できます。返されるTIMESERIES
バケットの最大数は366です。
たとえば、以下のクエリでは4分間の間隔を作成していますが、これは1日のチャートの上限となります。
SELECT average(duration) FROM Transaction since 1 day ago TIMESERIES MAX
SELECT ... UNTIL integer units AGO ...
UNTIL
句を使用して、クエリする時間範囲の終了を定義します。この値は排他的です。つまり、時間範囲は指定された瞬間までになりますが、その瞬間は含まれません。
デフォルト値はNOWです。UNTIL
は、デフォルト以外の終了点を指定するためのみに使用してください。
SINCEも参照してください。
詳細情報と例については、タイムピッカーを使用して時間設定を調整するを参照してください。
WHERE
句を使用して、結果をフィルタリングします。NRQLは、句で指定する条件を満たす結果を返します。
SELECT function(attribute) ... WHERE attribute [operator 'value' | IN ('value' [, 'value']) | IS [NOT] NULL ] [AND|OR ...] ...
- 複数の条件を指定する場合は、条件を演算子
AND
またはOR
で区切ります。
| 説明 |
---|---|
| NRQLは標準的な比較演算子を受け付けます。例: ブール値を持つ属性の場合、 |
| 2つの条件の論理積を定義するために使用します。 |
| 2つの条件の論理和を定義するために使用します。 |
| 属性がnull値を持つかどうかを判定します。 |
| 属性がnull値を持たないかどうかを判定します。 |
| 属性が |
| 属性が |
| 属性の文字列値が指定したセットに存在するかどうかを判断します。この方法を使用すると、複数の 例: |
| 属性の文字列値が指定したセットに存在しないかどうかを判断します。この方法を使用すると、複数の 値は括弧で囲み、カンマで区切る必要があります。例:
|
| 属性に指定のサブ文字列が含まれるかどうかを判断します。
以下の点に留意してください。
|
| 属性に指定のサブ文字列が含まれないかどうかを判断します。 |
| 属性に特定のRegexサブ文字列が含まれるかどうかを判断します。RE2構文を使用します。 例:
|
| 属性に指定のRegexサブ文字列が含まれないかどうかを判断します。RE2構文を使用します。 |
このクエリは、過去24時間、米国およびカナダ国内のSafariユーザーについて、URLにcheckout
が含まれるページのブラウザレスポンスタイムを返します。
SELECT histogram(duration, 50, 20) FROM PageViewWHERE countryCode IN ('CA', 'US') AND userAgentName='Safari' AND pageUrl LIKE '%checkout%'SINCE 1 day ago
メトリックデータのクエリに関する情報については、メトリクスのクエリを行うを参照してください。
FROM ... WITH function(attribute) AS var SELECT var ...
WITH ... AS
句を使用してNRQL環境変数を定義し、クエリ内のどこでも参照できる環境変数として値を格納します。いくつかのルールとヒント:
WITH ... AS
句は、FROM
/SELECT
句の前、間、直後に実行できます。- 環境変数として設定できるのは、行単位の関数(
capture()
など)のみです。集計関数(average()
など)はサポートされていません。 WITH
は1つしか使用できませんが、コンマで区切られている限り、複数のNRQL環境変数を使用できます。- 定義されたNRQL環境変数が既存の属性と同じ名前を使用する場合、環境変数が優先されます。
- 環境変数名に
%
記号を含めることはできません。
重要
イベント対メトリクスルールは、NRQLクエリのWITH ... AS
句をサポートしません。
以下にいくつかクエリを示します。
FROM Transaction WITH duration*1000 AS millisec SELECT millisec
FROM Log WITH aparse(message, '%itemId":"*","unitPrice":*}%') AS (itemId, unitPrice) SELECT itemId, unitPrice
アンカー解析(aparse()
)の詳細をご覧ください。
この例では、NRQL環境変数unitPrice
を使用して、抽出された文字列を数値に変換する別の環境変数unitPriceNum
を作成します。この環境変数は、SELECT
、WHERE
およびFACET
句で使用されます。
FROM Log WITH aparse(message, '%itemId":"*","unitPrice":*}%') AS (itemId, unitPrice), numeric(unitPrice) AS unitPriceNum SELECT sum(unitPriceNum) FACET itemId WHERE unitPriceNum < 100
SELECT ... WITH TIMEZONE (selected zone) ...
WITH TIMEZONE
句を使用すると、タイムゾーンが未指定のクエリ内で日付や時刻のタイムゾーンを選択できます。
日時にタイムゾーンを指定せずにWITH TIMEZONE
句を含めると、since
句とuntil
句は指定されたタイムゾーンを保持します。
WITH TIMEZONE
句を含めなくても、日時文字列にタイムゾーンを含めると、日時文字列のタイムゾーンが保持されます。
重要
タイムゾーンが指定されていない場合、デフォルトのタイムゾーンは常にUTCです。結果の生のタイムスタンプ値(JSONビューで表示)は常にUTCです。UIには、アカウント設定で指定したタイムゾーンで結果が表示されます。タイムスタンプ文字列のタイムゾーンは常に機能します。これは、WITH TIMEZONE
ゾーンより優先されます。
たとえば、クエリ句SINCE Monday UNTIL Tuesday WITH TIMEZONE 'America/New_York'
は、米国/ニューヨーク時間の月曜日の午前0時から、米国/ニューヨーク時間の火曜日の午前0時までに記録されたデータを返します。
クエリのタイムスパン句の例をいくつか紹介します。
WITH TIMEZONE
句を使用した日時文字列にタイムゾーンがありません。SINCE today UNTIL '2022-05-19T12:00' WITH TIMEZONE 'America/Los_Angeles'これは、
"beginTime": "2022-05-19T07:00:00Z"
と"endTime": "2022-05-19T19:00:00Z"
として解決されます。WITH TIMEZONE
句を使用しない日時文字列のタイムゾーン:SINCE today UNTIL '2022-05-19T12:00-0500'これは、
"beginTime": "2022-05-19T00:00:00Z"
と"endTime": "2022-05-19T17:00:00Z"
として解決されます。夏時間の-0700である米国/ロサンゼルスという
WITH TIMEZONE
句を使用した、日時文字列のタイムゾーン:SINCE today UNTIL '2022-05-19T12:00-0500' WITH TIMEZONE 'America/Los_Angeles'これは、
"beginTime": "2022-05-19T07:00:00Z"
と"endTime": "2022-05-19T19:00:00Z"
として解決されます。
利用可能なタイムゾーンの選択 | |||
---|---|---|---|
アフリカ/アビジャン | アフリカ/アディスアベバ | アフリカ/アルジェ | アフリカ/ブランタイヤ |
アフリカ/カイロ | アフリカ/ウィントフック | 米州/アダック | 米州/アンカレッジ |
米州/アラグアイナ | 米州/アルゼンチン/ブエノスアイレス | アメリカ/ベリーズ | アメリカ/ボゴタ |
アメリカ/カンポグランデ | アメリカ/カンクン | アメリカ/カラカス | アメリカ/シカゴ |
アメリカ/チワワ | アメリカ/ドーソンクリーク | アメリカ/デンバー | アメリカ/エンセナーダ |
アメリカ/グリーンベイ | アメリカ/ゴットホープ | アメリカ/グースベイ | アメリカ/ハバナ |
アメリカ/ラパス | アメリカ/ロサンゼルス | アメリカ/ミクロン | アメリカ/モンテビデオ |
アメリカ/ニューヨーク | アメリカ/ノローニャ | アメリカ/サンティアゴ | アメリカ/サンパウロ |
アメリカ/セントジョンズ | アジア/アナディル | アジア/バンコク | アジア/ベイルート |
アジア/ダマスカス | アジア/ダッカ | アジア/ドバイ | アジア/ガザ |
アジア/香港 | アジア/イルクーツク | アジア/エルサレム | アジア/カブール |
アジア/カトマンズ | アジア/コルカタ | アジア/クラスノヤルスク | アジア/マガダン |
アジア/ノボシビルスク | アジア/ヤンゴン | アジア/ソウル | アジア/タシケント |
アジア/テヘラン | アジア/東京 | アジア/ウラジオストク | アジア/ヤクーツク |
アジア/エカテリンブルク | アジア/エレバン | 大西洋/アゾレス | 大西洋/カーポベルデ |
大西洋/スタンリー | オーストラリア/アデレード | オーストラリア/ブリスベン | オーストラリア/ダーウィン |
オーストラリア/ユークラ | オーストラリア/ホバート | オーストラリア/ロードハウ | オーストラリア/パース |
チリ/イースター島 | その他/GMT+10 | その他/GMT+8 | その他/GMT-11 |
その他/GMT-12 | ヨーロッパ/アムステルダム | ヨーロッパ/ベルファスト | ヨーロッパ/ベオグラード |
ヨーロッパ/ブリュッセル | ヨーロッパ/ダブリン | ヨーロッパ/リスボン | ヨーロッパ/ロンドン |
ヨーロッパ/ミンスク | ヨーロッパ/モスクワ | 太平洋/オークランド | 太平洋/チャタム |
太平洋/ガンビエ | 太平洋/キリバス | 太平洋/マルケサス | 太平洋/ミッドウェイ |
太平洋/ノーフォーク | 太平洋/トンガタプ | UTC |
詳細な情報と例については、ダッシュボードとチャートで時間範囲を設定するを参照してください。
メトリックデータをクエリ
メトリックデータはその他のデータ型より複雑です。それをうまくクエリする特定のヒントがあります。メトリックデータには2つの型があり、それぞれに以下の独自のクエリガイドラインがあります。
- ディメンションメトリクスをクエリします。これは、当社のメトリクスAPIとそのAPIを使用するソリューションの一部(たとえば、Dropwizard インテグレーションまたはMicrometerインテグレーション)により報告されます。
- クエリメトリックタイムスライスデータ、当社のAPM、モバイルモニタリング、ブラウザモニタリングによって報告されるオリジナルのメトリックデータ型です。
メトリックデータのレポート方法の詳細は、メトリックデータタイプを参照してください。
関数
このセクションでは、NRQL関数、集計関数と非集計関数の両方について説明します。
集計関数
集計関数を使用して、データをフィルタリング、集計します。以下を使用するためのヒント:
New Relic Universityのフィルタークエリ、Apdexクエリ、およびパーセンタイルクエリのチュートリアルを参照してください。または、完全なWriting NRQLクエリのオンラインコースにアクセスしてください。
同じクエリで集計関数を複数回使用している場合(例:
SELECT median(one_metric), median(another_metric)
)、結果の表示に問題が生じることがあります。この問題を解決するには、AS
関数を使用します。例:SELECT median(one_metric) as 'med-a', median(another_metric) as 'med-b'データ型「型強制」には対応していません。利用可能なデータ型変換関数の詳細を参照してください。
時間の経過に伴う結果の表示方法については、時間の経過に伴う結果のグループ化を参照してください。
例:
SELECT histogram(duration, 10, 20) FROM PageView SINCE 1 week ago
aggregationendtime()
関数を使用して、関連集計の時刻を返します。より具体的には、aggregationendtime()
関数は、指定した集計の、集計期間終了のタイムスタンプを提供します。たとえば、時系列クエリでは、1時間分のデータを含むデータポイントの場合、関数はその時間の終わりのタイムスタンプを返します。
apdex
関数を使用して、単一のトランザクションまたはすべてのトランザクションのApdexスコアを返します。属性には、duration
またはbackendDuration
などのレスポンスタイムに基づく、任意の属性を指定できます。t:
引数は、選択した属性と同じ時間単位でApdex T閾値を定義します。たとえば、属性が秒単位で測定される場合、t
は秒単位の閾値になります。
apdex()
関数が返すApdexスコアは、実行時間のみに基づくものです。エラーは考慮していません。エラーが含まれているにもかかわらず、トランザクションがApdex T以下で完了する場合、そのトランザクションはapdex ()
関数によって満足と評価されます。
定義済みカスタム属性がある場合は、それらの属性に基づいて絞り込むことができます。たとえば、特に重要な顧客のApdexを監視することができます。
SELECT apdex(duration, t: 0.4) FROM Transaction WHERE customerName='ReallyImportantCustomer' SINCE 1 day ago
name
属性を使用して特定のトランザクションのスコア、またはname
を省略して総合的なApdexを返します。このクエリは、直近1時間のController/notes/indexトランザクションのApdexスコアを返します。
apdex
関数は、あなたのサイトに対するユーザーの満足度を測定するApdexスコアを返します。引数は、秒単位のレスポンスタイムの属性とApdex Tの閾値です。
SELECT apdex(duration, t: 0.5) from TransactionWHERE name='Controller/notes/index' SINCE 1 hour ago
このクエリの例では、直近3週間のアプリケーション全体のApdexを返します。
SELECT apdex(duration, t: 0.08) FROM Transaction SINCE 3 week ago
average()
関数を使用して、属性の平均値を返します。引数として単一の属性名を取得します。属性の値が数字でない場合、集計の際に無視されます。クエリの条件に合うデータが見つからない場合、またはクエリにより数値が返されない場合は、null値を返します。
buckets()
関数を使用して、FACET
句ごとに分割されたデータを、範囲に基づきバケットに集計します。New Relicデータベースの数値として保存される属性ごとにバケットにまとめることができます。
この関数は、以下の3つの引数を取ります。
属性名
サンプル範囲の最大値(外れ値は最終バケットに表示されます)
バケットの合計数
詳細と例については、データをバケットに分割を参照してください。
bucketPercentile()
関数は、Prometheusのhistogram_quantile
関数のNRQL版です。次元メトリックデータとともに使用します。分位数の代わりにNew Relicパーセンタイルを返します。これは分位数*100です。
bucketPercentile()
関数を使用して、Prometheus形式のヒストグラムデータから分位数を計算します。
バケット名を引数として取得し、バケットの境界とともにパーセンタイルをレポートします。
SELECT bucketPercentile(duration_bucket) FROM Metric SINCE 1 day ago
オプションで、引数としてパーセンタイル指定を追加できます。
SELECT bucketPercentile(duration_bucket, 50, 75, 90) FROM Metric SINCE 1 day ago
複数のメトリックスを使用してPrometheusヒストグラムデータを構成しているため、関連する<basename>
に関して特定のPrometheusメトリックスのクエリを行う必要があります。
たとえば、<basename>
prometheus_http_request_duration_seconds
がNRQLを使用して、Prometheusヒストグラムからパーセンタイルを計算するには、bucketPercentile(prometheus_http_request_duration_seconds_bucket, 50)
を使用します。_bucketがサフィックスとして<basename>
の最後に追加されていることに注意してください。
詳細については、Prometheus.ioドキュメントを参照してください。
cardinality()
関数を使用して、メトリック上のすべてのディメンション(属性)の組み合わせの数を取得します。
次の3つの引数を取りますが、すべてオプションです。
- メトリック名:ある場合は、
cardinality()
は指定したメトリックのみを計算します。 - インクルード:ある場合、Includeリストは濃度計算をこの属性に制限します。
- エクスクルード:ある場合、Excludeリストによりこの属性は濃度計算で無視されます。
cdfPercentage()
は累積分布関数の実装であり、attribute
値のパーセンテージ(値が1以下またはthresholds
を超える)を返します。
cdfPercentage()
attribute
引数に基づいて集計され、数値属性または分布メトリクス属性のいずれかになります。1つのクエリ内の混合型が受け入れられます。他の型(文字列など)は無視されます。最大10個の閾値を指定できます。
このクエリは、firstPaintが0.5秒以下のイベントの割合と、firstPaintが1秒以下のイベントの割合を返します。
FROM PageView SELECT cdfPercentage(firstPaint, 0.5, 1.0)
count()
関数を使用して、使用可能レコード数を返します。これは単一の引数を受け入れます (*
、属性、または定数値のいずれか)。現在、一般的なSQL動作に従い、その引数に対する値を持つすべてのレコードを計上します。
count(*)
は特定の属性を示すものではないため、結果はデフォルトの「humanize」形式でフォーマットされます。
derivative()
は、所定のデータセットの変化率を検索します。線形最小二乗回帰を使用して変化率を計算し、微分係数を近似します。この計算では複数のデータポイントの比較が必要であるため、評価範囲にデータポイントが1つしかない場合、解が求められず、結果はnull
値になります。
time interval
は、変化率を計算する期間です。たとえば、derivative(attributeName, 1 minute)
は1分あたりの変化率を返します。
dimensions()
関数を使用して、データ型のすべての次元値を返します。
オプションの引数を使用して、以下の特定の属性を明示的に含めたり、除外したりできます。
インクルード:ある場合、includeリストは
dimensions()
をそれらの属性に限定します。エクスクルード:ある場合、
dimensions()
の計算ではそれらの属性は無視されます。FROM Metric SELECT count(node_filesystem_size) TIMESERIES FACET dimensions()FACET
句とともに使用する場合、dimensions()
は、未集計クエリでのPrometheusの動作と同様に、イベントタイプで使用できるすべてのファセットについて一意の時系列を生成します。
earliest()
関数を使用して、指定された時間範囲における属性の最も古い値を返します。
単一の引数を取ります。
FACET
と併用する場合、この関数は得られた各ファセットの属性の最新値を返します。
このクエリは、PageView
イベントからユーザーエージェントごとに最も古い国コードを返します。
SELECT earliest(countryCode) FROM PageView FACET userAgentName
filter()
関数を使用して、SELECT文内の集計関数の1つに結果を制限します。filter()
はFACET
やTIMESERIES
とともに使用できます。フィルターは、次のような複数の異なる集計を選択する場合にのみ便利です。
SELECT filter(sum(x), WHERE attribute='a') AS 'A', filter(sum(x), WHERE attribute='b') AS 'B' ...
それ以外の場合は、標準WHERE
句を使用するのが良いでしょう。
filter()
は、一連のトランザクションで購入された商品の中で、オファーコードを使用して購入された商品と、オファーコードを使用せずに購入された商品を比較するために使用できます。
filter()
関数を使用して、SELECT
文内の集計関数の1つに結果を制限します。
funnel()
関数を使用して、ファネルチャートを生成します。属性を最初の引数として取ります。その後、カンマで区切られたWHERE
句(オプションでラベル付け用にAS
句を含める)としてステップを指定します。
詳細な情報と例については、 ファネルのドキュメントを参照してください。
histogram()
関数を使用して、ヒストグラムを生成します。この関数は、以下の3つの引数を取ります。
属性名
サンプル範囲の最大値
バケットの合計数(1~500(500を含む))
このクエリは20バケットにわたって10秒以内のレスポンスタイムのヒストグラムを生成します。
SELECT histogram(duration, 10, 20) FROM PageView SINCE 1 week agohistogram()
Prometheusヒストグラムバケットを受け取ります。SELECT histogram(duration_bucket, 10, 20) FROM Metric SINCE 1 week agohistogram()
ディストリビューションメトリックを入力として受け取ります。SELECT histogram(myDistributionMetric, 10, 20) FROM Metric SINCE 1 week agoFACET
句とともにhistogram()
を使用し、ヒートマップチャートを生成します。SELECT histogram(duration) FROM PageView FACET appName SINCE 1 week ago
keyset()
を使用すると、所定の時間範囲における所定のデータ型に対するすべての属性を表示できます。この関数は引数を取りません。文字列型キー、数値型キー、ブール型キー、およびすべてのキーをグループ化したJSON構造体を返します。
このクエリは、最終日からのPageView
イベントで見つかった属性を返します。
SELECT keyset() FROM PageView SINCE 1 day ago
latest()
関数を使用して、指定された時間範囲における属性の最新値を返します。
単一の引数を取ります。
FACET
と併用する場合、この関数は得られた各ファセットの属性の最新値を返します。
このクエリは、PageView
イベントからユーザーエージェントごとに最新の国コードを返します。
SELECT latest(countryCode) FROM PageView FACET userAgentName
latestrate()
関数を使用して、最後の2つのデータポイントに基づく値の変化率を返します。問題となる属性を最初の引数として受け取り、結果である変化率の時間の単位を2番目の引数として受け取ります。この関数は結果をchange in attribute/time interval
の単位で返します。
この関数は、最先端の傾向を確認するために、属性の最新の変化率を提供するのに役立ちます。
このクエリは、最後の2つのデータポイントに基づいて期間の変化率を返します。1 SECOND
引数であるため、duration/second
の単位で返されます。
SELECT latestrate(duration, 1 SECOND) FROM PageView
max()
関数を使用して、指定された時間範囲内に記録された数値属性の最大値を返します。引数として単一の属性名を取得します。属性の値が数字でない場合、集計の際に無視されます。クエリの条件に合うデータが見つからない場合、またはクエリにより数値が返されない場合は、null値を返します。
median()
関数を利用して、属性の中央値あるいは50パーセンタイルを返します。パーセンタイルクエリの詳細に関しては、percentile()を参照してください。
ヒント
median()
クエリは、クエリビルダーを利用する場合にのみ利用できます。
このクエリは、中央値に関する折れ線グラフを生成します。
SELECT median(duration) FROM PageView TIMESERIES AUTO
JOIN
句の中央値:
中央値は単に
percentile(attribute, 50)
のショートカットであるため、結合サブクエリからのmedian()
の結果は複合データ型であり、50パーセンタイル値をその計算値にマップします。getField()
関数を使用すると、外部クエリの実際の中央値を参照できます。マップされたキーは二重値の文字列表現であるため、median()
の場合は'50.0'
になります。FROM PageViewJOIN (FROM PageAction SELECT median(timeSinceLoad) FACET session, currentUrl) ON sessionSELECT latest(getField(median, '50.0')) as medianFACET browserTransactionName, currentUrl
min()
関数を使用して、指定された時間範囲内に記録された数値属性の最小値を返します。引数として単一の属性名を取得します。属性の値が数字でない場合、集計の際に無視されます。クエリの条件に合うデータが見つからない場合、またはクエリにより数値が返されない場合は、null値を返します。
与えられた数値属性の値(最初の引数、すなわち被除数)を数値(2つ目の引数、すなわち除数)で割った後、mod()
関数を使用してfloor係数を返します。このモジュロ演算は、WHERE句の条件内で使用して結果の任意のサブセットにフィルターしたり、FACET句で結果セットをさらに分割したりする方法として使用できます。
FROM Transaction SELECT * WHERE mod(port, 2) = 1
FROM NrConsumption SELECT uniques(hostId, 10000) SINCE 1 day AGO FACET mod(hostId, 10)
percentage()
関数を使用して、いくつかの条件に一致する目的のデータセットの割合を返します。
最初の引数には、目的の属性に対する集計関数が必要です。必ず2つの引数を使用してください(最初の2つ以外の引数は無視されます)。属性が数値でない場合、この関数は100%を値として返します。
FROM Transaction SELECT percentage(count(*), WHERE error is true ) AS 'Error Percent' Where host LIKE '%west%' EXTRAPOLATE
percentile()
関数を使用して、所定の指定パーセンタイルでの属性の概算値を返します。この関数は属性が必須であり、パーセンタイル点を表す引数はいくつでも指定できます。percentile()
関数は、小数点以下3桁までの表示を可能にすることで、より厳密な内容を提供できます。パーセンタイルの閾値は小数点値として指定される場合があるものの、大半のデータセットにおいて、互いに0.1よりも近いパーセンタイルは解決されない点に注意してください。
パーセンタイルの表示例
TIMESERIES
を使用して、時系列でマッピングされたパーセンタイルで折れ線グラフを生成します。
TIMESERIES
を省略して、パーセンタイルの集計値を示すビルボードと属性シートを生成します。パーセンタイルが指定されていない場合、デフォルトで95パーセンタイルとなります。50パーセンタイル値、つまり中央値のみを返すには、median()を使用することもできます。
このクエリは、5、50、95パーセンタイルの折れ線を表示する折れ線グラフを生成します。
SELECT percentile(duration, 5, 50, 95) FROM PageView TIMESERIES AUTOJOIN
句のパーセンタイル:結合サブクエリでパーセンタイルを使用する場合、サブクエリの結果は複合データ型であり、各パーセンタイルをその計算値にマップします。
getField()
関数を使用すると、外部クエリで個々のパーセンタイル値を参照できます。マップされたキーは二重値の文字列表現であるため、整数に「.0」を追加する必要があります。たとえば、95パーセンタイル値のキーは'95.0'
です。FROM PageViewJOIN (FROM PageAction SELECT percentile(timeSinceLoad, 95, 99.5) as pctl FACET session, currentUrl) ON sessionSELECT latest(getField(pctl, '95.0')) as `95th`, latest(getField(pctl, '99.5')) as `99.5th`FACET browserTransactionName, currentUrl
predictLinear()
はderivative()
関数の拡張機能です。同様の方法の最小2乗線形回帰を使用して、データセットの将来値を予測します。
time interval
は、クエリでどの程度将来まで扱うかを表します。たとえば、predictLinear(attributeName, 1 hour)
は、1時間の線形予想をクエリの時間枠の将来に当てはめます。- 一般に、
predictLinear()
は、ディスクスペースのような増加が続く値や大きなトレンドの予想などで有用です。 predictLinear()
は線形回帰のため、クエリを行っているデータセットに習熟していると、正確な長期的な予想を行えます。- 指数的または対数的、その他の非線形的に増加するデータセットでは、非常に短期的な予想でのみ有効な可能性が高いと言えます。
- New Relicでは、
TIMESERIES
クエリでpredictLinear
を使用することを推奨していません。これは、各バケットがクエリ内の相対的な期間に基づき個別に予想を行う、つまり、そうしたクエリは時系列終了以後の予想は示さないためです。
rate()
関数を使用して、時間間隔ごとに所定のクエリの頻度またはレートを可視化します。たとえば、1時間の1分あたりのページビュー数や1日間の1時間あたりのサイトのユニークセッション数を把握する必要がある場合があります。
TIMESERIES
を使用して、時系列でマッピングされた評価を示す折れ線グラフを生成します。TIMESERIES
を省略して、時間で平均化された単一の評価値を示すビルボードを生成します。過去6時間にわたる10分あたりのトランザクションのスループット評価を示す折れ線グラフを生成する基本的なクエリを以下に示します。
SELECT rate(count(*), 10 minute) FROM Transaction SINCE 6 hours agoTIMESERIESここでは、さまざまな時間枠でデータを比較するために
rate
を使用する方法を説明する短いビデオ(3分21秒)を紹介します。
round()
関数を使用して、属性の丸め値を返します。
オプションで、round()
は2番目の引数to_nearest
を取り、最初の引数を2番目の引数の最も近い倍数に切り上げます。to_nearest
は分数にすることができます。
SELECT round(n [, to_nearest])
stddev()
関数を使用して、指定された時間範囲内に記録された数値属性の標準偏差値を返します。単一の引数を取ります。属性が数値でない場合は、ゼロを値として返します。
stdvar()
関数を使用して、指定された時間範囲内に記録された数値属性の標準分散を返します。
単一の引数を取ります。属性が数値でない場合は、ゼロを値として返します。
sum()
関数を使用して、指定された時間範囲内に記録された数値属性の合計値を返します。
単一の引数を取ります。属性が数値でない場合は、ゼロを値として返します。
uniqueCount()
関数を使用して、指定された時間範囲内に記録された属性のユニーク値の数を返します。
ヒント
クエリのパフォーマンスを最適化するため、この関数は256個以上のユニーク値を検査するクエリのおおよその結果を返します。
uniques()
関数を使用して、指定された時間範囲内に記録された属性のユニーク値のリストを返します。facet
句と共に使用すると、各ファセット値ごとにユニーク属性値リストが返されます。
limit
パラメーターはオプションです。提供されない場合は、ファセットあたり1,000のユニーク属性値のデフォルトlimitが適用されます。最大10,000までの、別のlimit
値を指定できます。uniques()
関数は、limitに達するまで、発見したユニーク属性値の最初のセットを返します。このため、データセットに5,000のユニーク属性値があり、リミットが1,000に設定されている場合は、演算子はその頻度に関わらず、発見した最初の1,000のユニーク値を返します。
クエリ結果で返すことのできる最大数は、uniques()
上限とfacet
上限を掛け合わせたものになります。以下のクエリでは、論理的に返すことができる値の最大数は500万です(5,000 x 1,000)。
クエリするデータセットとクエリの複雑性に応じて、メモリ保護limitで非常に大きなクエリの実行が阻止される場合があります。
From Transaction SELECT uniques(host,5000) FACET appName LIMIT 1000
少数の属性の独自の組み合わせを知りたい場合、SELECT uniques(tuple(x, y, ... z)) ...
形式でクエリを構築することで、値の独自のタプルをすべて取得して、それらの関係を維持することができます。以下のクエリでは、tuple
がindex
とcellName
で一緒に使用され、これらの2つの値が組み合わせで発生する一意の要素を見つけます。
FROM NodeStatus SELECT uniques(tuple(index, cellName), 5)
非集計関数
NRQLクエリ内の非数値データには非集計関数を使用します。
accountId()
関数を使用して、クエリされたデータに関連するアカウントIDを返します。この関数は引数を取りません。以下にいくつかクエリを示します。
このクエリは、返された各Transaction
イベントに関連するアカウントIDを返します。
SELECT accountId() FROM Transaction SINCE 1 day ago
このクエリは、各アカウントIDに関連する最終日のTransaction
イベント数を返します。
SELECT count(*) FROM Transaction FACET accountId() SINCE 1 day ago
このクエリは、アカウントIDが、特に1
、2
、3
のいずれかである最終日のTransaction
イベント数を返します。
SELECT count(*) FROM Transaction WHERE accountId() IN (1,2,3) SINCE 1 day ago
アンカー解析関数、aparse()
を使用して、文字列から特定の値を抽出します。これはcapture()
の代替手段です。
aparse()
次の2つの引数が必要です。
文字列属性
アンカー文字列と抽出文字を含むパターン文字列。たとえば、
www.*.com
を使用して、URLからドメインを抽出できますaparse()
を使用する場合、パターン文字列には、上記のwww.
や.com
のようなアンカーを含めて、目的の抽出文字列(*
で示される)の場所を識別する必要があります。aparse()
はパターン文字列で次の文字を使用します。%
:LIKE
句に表示されているように、非キャプチャワイルドカード*
: 正規表現キャプチャの使用に似たワイルドカードのキャプチャ実際には、アンカー文字列は文字列属性の中央に発生し、先頭や末尾には発生しません。
この場合、
%
のワイルドカードを使用して、不要な値(%www.*.com%
など)を無視します。capture()
と同様に、aparse()
の結果はすべて文字列です。これらの結果を数学関数で使用するには、numeric()
関数でキャストする必要があります。注:
aparse()
は大文字と小文字を区別しません。FROM PageViewSELECT aparse(browserTransactionName, 'website.com/*')文字列の中央から値を抽出するには、パターン文字列の先頭と末尾で非キャプチャワイルドカード
%
を使用します。例:FROM LogSELECT count(*)FACET aparse(string, '%"itemId":"*"%')複数の値を環境変数として抽出する場合は、順序が重要であることに注意してください。例:
FROM LogWITH aparse(string, 'POST: * body: {"itemId":"*","unitPrice":*}\n') AS (url, itemId, unitPrice)SELECT url, itemId, unitPrice環境変数の詳細については、NRQL環境変数を参照してください。
concat()
関数を使用して、引数を連結した結果の文字列を返します。
数値、ブーリアン、タプル、または配列型の引数を20個まで指定できます。Null引数とサポートされていないタイプの引数は無視されます。引数が指定されていない場合、結果は空の文字列になります。
浮動小数点数値を連結する際に含まれる小数点以下の桁数を制限するために、オプションの精度引数を提供することができます。
結果の文字列の長さは最大4096文字です。
このクエリは、1つの文字列として小数点以下2桁とラベルで書式設定されたPageViewイベントから、バックエンドとネットワーク期間を返します。
FROM PageView SELECT concat('Backend Duration: ', backendDuration, ', Network Duration: ', networkDuration, precision: 2)
これにより、次のような形式で回答が返されます。
Backend Duration: 0.69, Network Duration: 0
このクエリは、ユーザーの都市、地域、国で構成される文字列をファセットしたPageViewイベントからの平均接続セットアップ時間を返します。
FROM PageView SELECT average(connectionSetupDuration) FACET concat(city, ', ', regionCode, ' ', countryCode) WHERE countryCode IN ('US', 'CA')
capture()
を使用して、RE2構文の正規表現を使用して属性から値を抽出します。
2つの引数が必要です。
属性名
キャプチャ構文を使用した正規表現(NRQLの正規表現はPythonのような構文
r'...'
を使用します)キャプチャする場合は、RE2名前付きキャプチャ構文
...(?P<name> pattern )...
は、指定された名前で、含まれるパターンをキャプチャします。複数の値をキャプチャするには、正規表現で追加のキャプチャグループを指定します。例:
...(?P<name1> pattern1)...(?P<name2> pattern2)...
注:複数の値をキャプチャする場合、各キャプチャ文では最大16個のキャプチャグループ、各NRQLクエリでは最大5個のキャプチャ文を持つことができます。
正規表現キャプチャを使用してクエリ結果を改善する方法をお読みください。
ヒント
正規表現は入力全体と一致する必要があります。キャプチャ式が期待される結果を抽出しない場合は、最初または最後に
.*
が必要かどうかを確認します。これは、部分一致正規表現のパターンです。ただし、部分一致正規表現は、クエリの実行を遅らせることがあります。capture()
を使用して、ダッシュボードの読みやすさを向上する方法を紹介する短いビデオ(3分05秒)もあります。詳しくは、以下の例をご覧ください。
以下では、ウェブサイトのドメイン名を選択し、
https://
とに続くパスを削除します。.com
SELECT capture(pageUrl, r'https://(?P<baseUrl>.*.com)/.+') FROM PageView SINCE 1 day ago以下では、エラーメッセージの最初のワードのみがキャプチャされます。
SELECT capture(errorMessage, r'(?P<firstWord>\S+)\s.+') FROM Transaction SINCE 1 hour ago where errorMessage is not nullキャプチャしたHTTPメソッドによって、以下がファセットされます。
SELECT count(*) FROM Log WHERE message like '%HTTP%' FACET capture(message, r'.* "(?P<httpMethod>[A-Z]+) .*')以下は、キャプチャされたジョブ名が
ExampleJob
である正規表現と一致するmessage
属性を持つログイベントに基づいて、結果をフィルター処理します。SELECT message FROM Log WHERE capture(message, r'.*Job Failed: (?P<jobName>[A-Za-z]+),.*') = 'ExampleJob' SINCE 10 minutes ago以下では、ログラインからCPU時間の合計をキャプチャします。数学演算を実行するには、明示的に数値にキャストする必要があります。
SELECT sum(numeric(capture(message, r'.*CpuTime:\s(?P<cpuTime>\d+)'))) FROM Log WHERE message like '%CpuTime:%' SINCE 1 hour agoこの例では、NRQL環境変数を使用して、ログメッセージからキャプチャした複数の値を格納します。
FROM LogWITH capture(message, r'POST to carts: (?P<URL>.*) body: {"itemId":"(?P<UUID>.*)","unitPrice":(?P<unitPrice>.*)}.*')AS (URL, UUID, unitPrice)SELECT URL, UUID, unitPriceWHERE URL IS NOT NULLNRQL環境変数の詳細については、こちらをご覧ください。
...WHERE eventType() = 'EventNameHere'......FACET eventType()...
FACET句でeventType()
関数を使用し、選択したデータ型別に結果を取り出し、またはWHERE句で特定のデータ型に結果をフィルタリングします。これは filter() や percentage() 関数で特定のデータ型を対象とする際に特に便利です。
重要
この文脈において、「イベントタイプ」はNRQLクエリでアクセス可能なデータ型を指します。
このクエリは、合計Transaction
の結果あたりの合計TransactionError
の結果の割合を返します。eventType()
関数を使用して、filter()
関数で特定のデータ型をターゲットにすることができます。
SELECT 100 * filter(count(*), where eventType() = 'TransactionError') / filter(count(*), where eventType() = 'Transaction') FROM Transaction, TransactionError WHERE appName = 'App.Prod' TIMESERIES 2 Minutes SINCE 6 hours ago
このクエリは、各データ型(Transaction
およびTransactionError
)が返すレコード数を表示します。
SELECT count(*) FROM Transaction, TransactionError FACET eventType() TIMESERIES
getField()
関数を使用して、ディメンションメトリックデータなどの複合データ型からフィールドを抽出します。
次の引数を取ります。
メトリックタイプ | サポートされているフィールド |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
例:
SELECT max(getField(mySummary, count)) from Metric
SELECT sum(mySummary) from Metric where getField(mySummary, count) > 10
getCdfCount()
は累積分布関数の実装であり、threshold
以下のattribute
の値の数を返します。
許可される閾値は1つだけです。Attribute
は、数値属性または分布メトリクス属性のいずれかです。1つのクエリ内の混合型が受け入れられます。
数値型の場合、属性が閾値以下の場合は1を返し、それ以外の場合は0を返します。分布の場合は、分布によって表されるデータセット内のカウントを返します。他のすべての型では、0を返します。
このクエリは、firstPaintが1秒以下のイベント数を返します。
FROM PageView SELECT sum(getCdfCount(firstPaint, 1.0))
if()
を使用して、クエリ全体でif-then-elseコントロールフロー操作を実行します。
if()
次の3つの引数が必要です。
条件 - trueまたはfalseに評価できる式
trueValue - ブール式がtrueの場合、この値が返されます
falseValue - ブール式がfalseの場合、またはNULLが指定されていない場合に、このオプション値が返されます
FROM LogSELECT count(*)FACET if(level_name = 'ERROR', 'ERROR', 'NOT_ERROR')FROM LogSELECT count(*)FACET if(level_name = 'INFO' OR level_name = 'WARNING', 'NOT_ERROR', 'ERROR')ネストされたif()関数を使用して、条件付きロジックを追加します。
FROM Transaction SELECT count(*)FACET if(appName LIKE '%java%', 'Java',if(appName LIKE '%kafka%', 'Kafka', 'Other'))
length()
関数を使用して、文字列値の長さまたは配列値の要素数を返します。
単一の引数を取ります。
このクエリは、PageView
イベントから各URL文字列の長さを返します。
SELECT length(pageUrl) FROM PageView
ルックアップテーブルをアップロードした場合、テーブル名でこの機能を使用すると、クエリ内テーブルのデータにアクセスできます。クエリの例を以下に示します。
FROM Log SELECT count(*)WHERE hostname IN (FROM lookup(myHosts) SELECT uniques(myHost))
詳細については、ルックアップテーブルデータのクエリ方法を参照してください。
lower()
関数を使用して、文字列値のアルファベット文字をすべて小文字に変更します。
引数:
str - 小文字にする文字列値
- これは、引用符内のリテラル文字列、クエリされた文字列属性、文字列を返す関数、または単一の文字列値を返すサブクエリなどの文字列に評価されるものなら何でもかまいません。
- この引数がnullと評価される場合は、
lower()
関数はnullを返します。
このクエリは、クエリのさまざまな部分で
lower()
関数を使用する方法を示します。FROM PageActionSELECT latest(lower(actionName))WHERE lower(actionName) = lower('acmePageRenderedEvent') OR lower(actionName) = lower('SubmitLogin')FACET concat(actionName, ':', lower(actionName))lower(str)
例関連機能:
upper()
minuteOf()
関数を使用して、有効なタイムスタンプ値を持つ属性の分の部分(つまり、0〜59分)のみを抽出します。
position()
関数を使用して、文字列内の部分文字列の位置を見つけます。一致では大文字と小文字が区別されます。
引数:
str - 部分文字列を検索する文字列。
- これは、引用符内のリテラル文字列、クエリされた文字列属性、文字列を返す関数、または単一の文字列値を返すサブクエリなどの文字列に評価されるものなら何でもかまいません。
substr - 文字列内で検索する文字列。
occurrence - 部分文字列の出現する位置を返します。
_デフォルト:_0
正の場合、ゼロベースで文字列の先頭からn番目に出現する部分文字列を検索します。
負の場合、文字列の末尾からn番目に出現する部分文字列を検索します。最後に出現する部分文字列は-1になります。
Alias:
indexOf(str, substr , occurrence)
-indexOf()
はposition()
関数の代替名です戻り値:
文字列内での部分文字列の開始文字の0ベースのインデックス
strがnull、substrがnull、または参照されたsubstrが見つからない場合は、Nullが返されます。
このクエリは、
position()
関数を使用して文字列内のさまざまな部分文字列の位置インデックスを検索する方法を示します。ここでは、position()
関数の引数内でのsubstring()
関数の使用も示します。FROM PageViewWITH position(pageUrl, ':') as FirstColon,position(pageUrl, '/', 1) + 1 as DomainBegin, position(pageUrl, '/', 2) as DomainEnd, DomainEnd - DomainBegin as DomainLengthSELECT pageUrl, FirstColon, substring(pageUrl, 0, FirstColon) as Protocol,DomainBegin, DomainEnd, DomainLength, substring(pageUrl, DomainBegin, DomainLength) as Domain,position(pageUrl, '/', -1) as LastSlash, substring(pageUrl, position(pageUrl, '/', -1)) as PathEndposition(str, substr , occurrence)
例
string()
関数を使用して、数値、ブーリアン値、タプル値、または配列値を文字列値に変換します。
次の2つの引数を取り、1つはオプションです。
属性名
精度:存在する場合、浮動小数点数値を変換する際に含まれる小数点以下の桁数に制限を適用します。
このクエリは、PageView期間を小数第2位までの文字列として返します。
FROM PageView SELECT string(duration, precision: 2)このクエリは、PageView期間の平均を小数第2位までの文字列として返します。
FROM PageView SELECT string(average(duration), precision: 2)string()
を使用して、小数点以下の桁数を失うことなく浮動小数点値でファセットします。FROM PageView SELECT count(*) FACET string(tuple(asnLatitude, asnLongitude), precision: 2)
substring()
関数を使用して文字列の一部を抽出します。
引数:
str - 部分文字列を抽出する文字列。
- これは、引用符内のリテラル文字列、クエリされた文字列属性、文字列を返す関数、または単一の文字列値を返すサブクエリなどの文字列に評価されるものなら何でもかまいません。
- この引数がnullと評価される場合は、
substring()
関数はnullを返します。
start - 抽出を開始する文字列内の位置。
- 文字列の最初の文字位置は0です。
- 負の値は、文字列の末尾の文字位置が-1で、文字列の末尾に相対的な位置を検索します。
- startが文字列の長さより長いか等しい場合、
substring()
関数は空の文字列を返します。 - startが負で、その絶対値が文字列の長さより長い場合、抽出された部分文字列の位置は0から開始されます。
length - 文字列から抽出する部分文字列の長さまたは文字数。
- オプション - 長さが指定されていない場合、解決された開始位置の後の文字列のすべての文字が含まれます。
このクエリはセッション値の一部を返します。
FROM PageViewSELECT session, substring(session, 0, 3) as First3,substring(session, 3) as After3rd,substring(session, -3) as Last3substring(str, start , length)
例position()
とsubstring()
を一緒に使用する例については、position()
関数を参照してください。
upper()
関数を使用して、文字列値のアルファベット文字をすべて大文字に変更します。
引数:
str - 大文字にする文字列値
これは、引用符内のリテラル文字列、クエリされた文字列属性、文字列を返す関数、または単一の文字列値を返すサブクエリなどの文字列に評価されるものなら何でもかまいません。
この引数がnullと評価される場合は、
upper()
関数はnullを返します。このクエリは、クエリのさまざまな部分で
upper()
関数を使用する方法を示します。FROM PageActionSELECT latest(upper(actionName))WHERE upper(actionName) = upper('acmePageRenderedEvent') OR upper(actionName) = upper('SubmitLogin')FACET concat(actionName, ':', upper(actionName))upper(str)
例関連関数:
lower()
データ型変換
NRQLは「型強制」をサポートしていません。つまり、文字列として保存されたフロートは文字列として取り扱われ、フロート値を要求する関数に渡しても操作できません。
以下に示す関数で、数値を伴う文字列、または文字列を伴うブーリアン値を同等の数値またはブーリアン値に変換したり、文字列以外の値を文字列値に変換したりできます。
numeric()
関数を使用して、文字列形式の数値を数値に変換します。この関数は、クエリ結果に数学関数を使用するクエリ、またはaverage()
などのNRQL集計関数に組み込むことができます。boolean()
関数を使用して、"true"
または"false"
の文字列値を対応するブーリアン値に変換します。string()
関数を使用して、数値、ブーリアン値、タプル値、または配列値を文字列値に変換します。詳細については、上記のstring()
を参照してください。
コメント
NRQLクエリを記述する際にコメントを追加すると、チームメンバーがクエリをさらに理解して使用できるようになります。
構文の詳細は以下のとおりです。
--
2つのダッシュは、同じ行にあるこのインジケーターの右側にあるすべてのテキストをコメントアウトします。//
2つのスラッシュは、同じ行にあるこのインジケーターの右側にあるすべてのテキストをコメントアウトします。/* */
これらの文字セットの間にあるテキストはすべてコメントアウトされます。このインジケーターは複数の行に適用できます。
コメントはどこにでも表示されるわけではありません。「最近のクエリ」や「クエリを表示」などの一部のビューにはコメントは表示されません。
コメントを含むクエリの例:
FROM Transaction SELECT uniqueCount(appId) -- This will return the number of unique App IDs
FROM TransactionErrorSELECT count(*) SINCE 1 day ago // Transaction Error for the past day
FROM TransactionTrace /* This data may be incomplete;If so, run a query of Transaction */SELECT count(*)
関連ドキュメント
NRQL構文とルールを理解するためのその他の人気リソースには、以下が含まれます。
- New Relic UniversityのNRQL教育コース
Metric
データ型のクエリ方法を習得- サブクエリを使用
- ファネルを使用して一連の関連データを評価する