優れたNRQLクエリを記述するには、当社のさまざまなNRQL句と関数がどのように機能するかを理解すると有益です。このドキュメントには、NRQL句と関数の定義、およびその使用方法の例が記載されています。
基本的なNRQL構文ルールをお探しですか? NRQLの使用方法を参照してください。チュートリアルについては、NRQL入門チュートリアルを参照してください。
クエリの構成要素
基本的なNRQL構文ドキュメントに記載されているように、すべてのNRQLクエリにはSELECT句とFROM句が含まれています(他の句はすべてオプション)。以下の句の定義には、NRQLクエリの例も含まれます。
DELETEキーワード
New Relicクエリ言語(NRQL)のDELETEキーワードは、Pipeline Control内の特定のデータと属性を削除するために使用されます。これは、New Relicデータベース(NRDB)に取り込まれるデータを管理するのに役立ちます。
DELETEキーワードは、削除するデータまたは属性を指定するためにNRQLクエリに適用されます。以下に例をいくつか挙げます。
以下にいくつか例を挙げます。
特定のメトリクスの削除:
DELETE FROM MetricWHERE metricName = 'newrelic.goldenmetrics.infra.kubernetes_pod.podScheduled'- 指定された名前のメトリクスを削除します。
特定のスパンの削除:
DELETE FROM Span WHERE appName = 'external-usage-consumer (test-odd-wire)'- 指定されたアプリケーションに関連付けられたスパンを削除します。
特定のエージェント更新の削除:
DELETE FROM AgentUpdate WHERE a = 'b'- 属性
aがbに等しいエージェントの更新を削除します。
- 属性
必要な句
SELECT attribute ...SELECT function(attribute) ...SELECTは、属性または関数を指定することによって、データ型のどの部分をクエリするかを指定します。その後、カンマ区切りの1つ以上の引数が続きます。各引数では、以下を実行できます。
- ワイルドカードとして
*を使用することで、利用可能なすべての属性値を取得。例:SELECT * FROM Transaction。 - 指定した属性、または カンマ区切りのリストで指定した複数の属性に関連する値を取得。
- 集計関数を選択することで、指定した属性から集計値を取得。
AS句で、各引数で返された結果にラベル付け。
基本的な数学関数とともにSELECTを使用することもできます。
このクエリは、直近1週間の平均応答時間を返します。
SELECT average(duration) FROM PageView SINCE 1 week ago同じSELECTステートメントに、 *ワイルドカードと個々の属性、関数、数式、NRQL変数の両方を含めることができます。*はSELECTリストの先頭または末尾に表示される場合があり、選択した追加の列はそれぞれ結果テーブルの先頭または末尾に表示されます。
SELECT *, attribute, function(attribute), attribute1 + attribute2 FROM ...WITH attribute1 + attribute2 AS attrSum SELECT attrSum, attribute, function(attribute), * FROM ...ヒント
SELECTリストでは、*とともに非集計関数のみがサポートされます。
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 agolookup()をご覧ください。
オプション句
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 agoSELECT ... (SINCE or UNTIL) (integer units) AGOCOMPARE 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値からの増減率でビルボードを生成します。
Exampleこのクエリは、過去1週間の95パーセンタイルと1週間前の同じ範囲の比較を表示する折れ線グラフでデータを返します。最初は単一値、次は折れ線グラフです。
SELECT percentile(duration, 95) FROM PageViewSINCE 1 week ago COMPARE WITH 1 week AGO
SELECT percentile(duration, 95) FROM PageViewSINCE 1 week ago COMPARE WITH 1 week AGO TIMESERIES AUTO重要
COMPARE WITHを使用するFACETクエリの場合、結果のファセットは、比較される前の時間範囲ではなく、SINCEおよびUNTILを使用して指定された時間範囲に基づいて選択されます。以前の時間範囲のみに対するFACETクエリの結果には、別のファセットのセットが含まれる場合があります。
この句は以下のデータ型で使用できます。
TransactionTransactionErrorエージェントAPIで報告されたカスタムイベント
EXTRAPOLATEの目的は、クエリ結果がシステム内のアクティビティ全体をより厳密に表現できるよう、イベントデータのAPMエージェントサンプリングの影響を数学的に補うことです。この句は、APMエージェントが収集サイクルの報告限度をしばしば超過する多くのイベントを報告する際に便利です。その場合、エージェントはイベントのサンプリングを開始します。
EXTRAPOLATEに対応したNRQLクエリでこれを使用する場合、reported eventsとtotal eventsの比率で、合計未サンプルデータの近似を推定します。この句に未対応であるか、サンプルデータを使用していないNRQLでこれを使用する場合、結果に影響を与えません。重要
EXTRAPOLATEは、(スループットまたはエラー率など)同種データに対して最も有用である点に注意してください。(uniqueCount()またはuniques()など)特徴的なものの数を外挿する際には有効ではありません。この句は、以下のいずれかの集計関数を使用するNRQLクエリでのみ機能します。
apdexaveragecounthistogramsumpercentage(引数として取る関数がEXTRAPOLATEに対応している場合)rate(引数として取る関数がEXTRAPOLATEに対応している場合)stddevinterestingApplicationという名前のサービスの推定スループットを示すクエリ。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句で指定した最初のフィールドの降順で並べ替えられます。5,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 NULLFACET ... 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で可能な条件よりも複雑な条件でデータを分類するには、 FACET CASESを使用します。複数の条件はカンマ,で区切ります。 たとえば、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 nameNRQLでは、デフォルトは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句はサブクエリの直後に置く必要があります。
Join types | |
|---|---|
| 結果には、結合されたサブクエリの結果に一致する値を持つ、外部クエリの値のみが含まれます。これはデフォルトの結合タイプです。 |
| 結果には、結合されたサブクエリと一致しない外部クエリのイベントが含まれます。 |
Join | |
|---|---|
| サブクエリと外部クエリで比較するキーの値を定義します。使用できる唯一の比較演算子は等価です。
|
| これは、キー識別子が両方のコンテキストで同じ場合の簡略構文です。 |
考慮すべき制限事項:
- 結合されたサブクエリのデフォルトの
LIMITは10で、最大LIMITは5,000です。外部クエリの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句で許容される最大値は5,000です。クエリでは、特定の値の代わりにLIMIT MAX句を使用できます。これにより、デフォルトで現在の最大値が自動設定されます。これを使用すると、将来的に変更される場合でも、常に最大数の結果を投稿できます。クエリの動作を変更しないようにするには、LIMIT MAXを使用する代わりに明示的な値を指定します。
このクエリはセッション数上位20カ国を表示し、各国のWindowsユーザー限定でレスポンスタイムの95パーセンタイルを提供します。
SELECT uniqueCount(session), percentile(duration, 95)FROM PageView WHERE userAgentOS = 'Windows'FACET countryCode LIMIT 20 SINCE YESTERDAYSELECT ...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を参照してください。
FROM Transaction SELECT count(*) WHERE error IS TRUE TIMESERIES PREDICT...PREDICT句を使用すると、履歴データに基づいて将来のデータ傾向の予測を折れ線グラフに追加できます。この句を使用する場合は、次の点を考慮してください。
TIMESERIES句を含むクエリにのみ適用されます。- 予測データポイントの間隔として
TIMESERIES <time period>を使用します。 - パブリックプレビュー中はメトリックタイムスライスデータはサポートされません。
重要
PREDICT句は、COMPARE WITH句やサブクエリ内の ネストされた集計と併用することはできません。
PREDICTをいつ、どのように使用できるかについての詳細は、NRQL予測を参照してください。
SHOW EVENT TYPES...SHOW EVENT TYPES は、特定の時間範囲内にアカウントに存在するすべてのデータ型のリストを返します。これは、SELECTの代わりにクエリの最初の句として使用されます。
重要
この文脈において、「イベントタイプ」はNRQLクエリでアクセス可能なデータ型を指します。
このクエリは、直近1日のすべてのデータ型を返します。
SHOW EVENT TYPES SINCE 1 day agoSELECT ...SINCE [numerical units AGO | phrase]...default値は1 hour agoです。
SINCE句を使用して、返されたデータに対する時間範囲の包括的な開始を定義します。タイムゾーンは結果ではなく、クエリに対して指定できます。NRQLの結果はシステム時間に基づきます。
NRQLを使用する場合、UTCタイムスタンプ、相対時間、またはDateTime文字列を設定できます。時間の指定を参照してください。
以下も参照してください。
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 minuteSLIDE 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 minuteTIMESERIES 30 minutesTIMESERIES 1 hourTIMESERIES 30 seconds
TIMESERIES 以下の例に示すように、MAX、AUTO、SLIDE BYなどの引数と組み合わせると、クエリ結果をさらに調整できます。
重要
average()またはpercentile()などの関数では、集計ウィンドウを大きく設定することで、外れ値に対して大幅なスムージング効果が得られます。これは、クエリがスライディングウィンドウを使用するかどうかに関係なく当てはまります。
指定された値は、グラフを分割する単位を示します。たとえば、以下のようにして1日のグラフを30分刻みで表示します。
SELECT ... SINCE 1 day AGO TIMESERIES 30 minutesTIMESERIES はAUTOに設定することもでき、これによってグラフが適切な数の区分に分割されます。たとえば、1日のチャートは30分間隔で分割され、1週間のチャートは6時間間隔で分割されます。
このクエリは、6時間間隔のデータ点で、1週間のクライアントサイドのトランザクションタイムの50パーセントタイルと90パーセンタイルを示す折れ線グラフを返します。
SELECT average(duration), percentile(duration, 50, 90)FROM PageView SINCE 1 week AGO TIMESERIES AUTOTIMESERIESをMAXに設定することで時間枠が自動的に調整され、指定された期間に許可された間隔数を最大にできます。これによって、TIMESERIESバケットを手動で更新することなく時間枠を更新でき、認められた最大インターバル数に時間枠を分割できます。返されるTIMESERIESバケットの最大数は366です。
たとえば、以下のクエリでは4分間の間隔を作成していますが、これは1日のチャートの上限となります。
SELECT average(duration) FROM Transaction SINCE 1 day ago TIMESERIES MAXSELECT ...UNTIL integer units AGO...UNTIL句を使用して、クエリする時間範囲の終了を定義します。この値は排他的です。つまり、時間範囲は指定された瞬間までになりますが、その瞬間は含まれません。
default値はNOWです。 UNTILは、デフォルト以外の終了点を指定するためのみに使用してください。
以下も参照してください。
WHERE句を使用して、結果をフィルタリングします。NRQLは、句で指定する条件を満たす結果を返します。
SELECT function(attribute) ...WHERE attribute [operator 'value' | IN ('value' [, 'value']) | IS [NOT] NULL ][AND|OR ...]...- 複数の条件を指定する場合は、条件を演算子
ANDまたはORで区切ります。
Operators that the | Description |
|---|---|
| NRQLは標準的な比較演算子を受け付けます。例: ブール値を持つ属性の場合、 |
| 2つの条件の論理積を定義するために使用します。 |
| 2つの条件の論理和を定義するために使用します。 |
| 属性がnull値を持つかどうかを判定します。 |
| 属性がnull値を持たないかどうかを判定します。 |
| 属性が |
| 属性が |
| 属性の文字列値が指定したセットに存在するかどうかを判断します。この方法を使用すると、複数の 例: |
| 属性の文字列値が指定したセットに存在しないかどうかを判断します。この方法を使用すると、複数の 値は括弧で囲み、カンマで区切る必要があります。例: |
| 属性に指定のサブ文字列が含まれるかどうかを判断します。
以下の点に留意してください。
|
| 属性に指定のサブ文字列が含まれないかどうかを判断します。 |
| 属性に特定のRegexサブ文字列が含まれるかどうかを判断します。RE2構文を使用します。 Examples:
|
| 属性に指定の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 varSELECT var...WITH ... AS句を使用してNRQL環境変数を定義し、クエリ内のどこでも参照できる環境変数として値を格納します。いくつかのルールとヒント:
WITH ... AS句は、FROM/SELECT句の前、間、直後に実行できます。- 環境変数として設定できるのは、行単位の関数(
capture()など)のみです。集計関数(average()など)はサポートされていません。 WITHは1つしか使用できませんが、コンマで区切られている限り、複数のNRQL環境変数を使用できます。- 定義されたNRQL環境変数が既存の属性と同じ名前を使用する場合、環境変数が優先されます。
- 環境変数名に
%記号を含めることはできません。
重要
イベント対メトリクスルールは、NRQLクエリのWITH ... AS句をサポートしません。
以下にいくつかクエリを示します。
FROM TransactionWITH duration * 1000 AS millisecSELECT millisecFROM LogWITH aparse(message, '%itemId":"*","unitPrice":*}%') AS (itemId, unitPrice)SELECT itemId, unitPriceアンカー解析(aparse())の詳細をご覧ください。
この例では、NRQL環境変数unitPriceを使用して、抽出された文字列を数値に変換する別の環境変数unitPriceNumを作成します。この環境変数は、SELECT、WHEREおよびFACET句で使用されます。
FROM LogWITH aparse(message, '%itemId":"*","unitPrice":*}%') AS (itemId, unitPrice), numeric(unitPrice) AS unitPriceNumSELECT sum(unitPriceNum)FACET itemIdWHERE unitPriceNum < 100SELECT ... 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"として解決されます。
利用可能なゾーンIDのリストを参照してください。
詳細な情報と例については、ダッシュボードとチャートで時間範囲を設定するを参照してください。
メトリックデータをクエリ
メトリックデータはその他のデータ型より複雑です。それをうまくクエリする特定のヒントがあります。メトリックデータには2つの型があり、それぞれに以下の独自のクエリガイドラインがあります。
- ディメンションメトリクスをクエリします。これは、当社のメトリクスAPIとそのAPIを使用するソリューションの一部(たとえば、Dropwizard インテグレーションまたはMicrometerインテグレーション)により報告されます。
- クエリメトリックタイムスライスデータ、当社のAPM、モバイルモニタリング、 によって報告されるオリジナルのメトリックデータ型です。
メトリックデータのレポート方法の詳細は、メトリックデータタイプを参照してください。
関数
このセクションでは、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 agoaggregationendtime()関数を使用して、関連集計の時刻を返します。より具体的には、aggregationendtime()関数は、指定した集計の、集計期間終了のタイムスタンプを提供します。たとえば、時系列クエリでは、1時間分のデータを含むデータポイントの場合、関数はその時間の終わりのタイムスタンプを返します。
apdex関数を使用して、単一のトランザクションまたはすべてのトランザクションのApdexスコアを返します。デフォルトのApdexスコアは0.5秒です。属性には、durationまたはbackendDurationなどのレスポンスタイムに基づく任意の属性を指定できます。t:引数は、選択した属性と同じ時間単位でApdex T閾値を定義します。たとえば、属性が秒単位で測定される場合、tが秒単位の閾値になります。
apdex()関数が返すApdexスコアは、実行時間のみに基づくものです。APMエラーは考慮していません。もしトランザクションにエラーが含まれていても、それがApdex T以下で完了する場合、そのトランザクションはapdex()関数によって満足と評価されます。
定義済みカスタム属性がある場合は、それらの属性に基づいて絞り込むことができます。たとえば、特に重要な顧客のApdexを監視することができます。
SELECT apdex(duration, t: 0.4) FROM TransactionWHERE customerName = 'ReallyImportantCustomer' SINCE 1 day agoname属性を使用して特定のトランザクションのスコア、または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 agoaverage()関数を使用して、属性の平均値を返します。引数として単一の属性名を取得します。属性の値が数字でない場合、集計の際に無視されます。クエリの条件に合うデータが見つからない場合、またはクエリにより数値が返されない場合は、null値を返します。
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分あたりの変化率を返します。
earliest()関数を使用して、指定された時間範囲における属性の最も古い値を返します。
単一の引数を取ります。
FACETと併用する場合、この関数は得られた各ファセットの属性の最も古い値を返します。
ヒント
複数のイベントまたはメトリクスが同じ最も早いタイムスタンプを共有する場合、返される結果はランダムであり、クエリの実行ごとに異なる場合があります。より一貫した結果を得るには、これらのイベントまたはメトリクスに対して異なる値を持つ属性でファセットを作成してください。
このクエリは、PageViewイベントからユーザーエージェントごとに最も古い国コードを返します。
SELECT earliest(countryCode) FROM PageView FACET userAgentNamefilter()関数を使用して、SELECT文内の集計関数の1つに結果を制限します。filter()は、FACETやTIMESERIESとともに使用できます。フィルターは、次のような複数の異なる集計を選択する場合にのみ役立ちます。
SELECT filter(sum(x), WHERE attribute = 'a') AS 'A', filter(sum(x), WHERE attribute = 'b') AS 'B' ...それ以外の場合は、標準WHERE句を使用するのが良いでしょう。
funnel()関数を使用して、ファネルチャートを生成します。属性を最初の引数として取ります。その後、カンマで区切られたWHERE句(オプションでラベル付け用にAS句を含める)としてステップを指定します。
詳細な情報と例については、 ファネルのドキュメントを参照してください。
histogram()関数を使用して、ヒストグラムを生成します。これは、データセットのディストリビューションの可視化に役立ちます。データセットを指定された数のバケットに分割し、各バケットに含まれるデータポイントの数をカウントします。
引数:
attribute1番目の引数は必須で、各ヒストグラムのバケット範囲内の値をカウントする属性を指定します。width:サンプル範囲の幅を示します。範囲の最大値は、start引数値にこのwidth値を加えた値になります。- 位置引数(ラベルなし)を使用する場合、
widthが2番目の引数になります。 - デフォルト:
10
- 位置引数(ラベルなし)を使用する場合、
buckets:バケットの合計数(1~500の間)。- 位置引数(ラベルなし)を使用する場合、
bucketsが3番目の引数になります。 - デフォルト:
40
- 位置引数(ラベルなし)を使用する場合、
start:ヒストグラム範囲の開始値。- 位置引数(ラベルなし)を使用する場合、
startが4番目の引数になります。 - デフォルト:
0
注意
定義されたヒストグラムの範囲外の値は、最初または最後のバケットに含められます。最初のバケット数にはヒストグラム範囲より小さい値が含まれ、最後のバケット数にはヒストグラム範囲より大きい値が含まれます。ヒストグラムの結果からこれらの値を除外するには、クエリのwhere句にフィルターを含めます。(例:
WHERE attribute >= [start] AND attribute <= [start + width])このクエリは、40バケットにわたって10秒以内のレスポンスタイムのヒストグラムを生成します。すなわち、各バケットが0.25秒の範囲の値をカバーします。(10/40=0.25)。10秒を超える期間の値は最後のバケットに含められます。期間がゼロ未満になるような場合があれば、その値は最初のバケットに含まれます。
SELECT histogram(duration) FROM PageView SINCE 1 week agoこれらの同様のクエリは、10バケットにわたって5秒以内のレスポンスタイムのヒストグラムを生成します。
SELECT histogram(duration, 5, 10) FROM PageView SINCE 1 week agoSELECT histogram(duration, width: 5, buckets: 10) FROM PageView SINCE 1 week agoこれらの同様のクエリは、3バケットにわたって1~4秒のレスポンスタイムのヒストグラムを生成します。
バケットの構成は次のとおりです。
バケット1
バケット2
バケット3
バケットの範囲
1〜2
2〜3
3〜4
カウントされる値
2未満
2以上3未満
3以上
SELECT histogram(duration, 3, 3, 1)FROM PageView SINCE 1 week agoSELECT histogram(duration, width: 3, buckets: 3, start: 1)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 agolatest()関数を使用して、指定された時間範囲における属性の最新値を返します。
単一の引数を取ります。
FACETと併用する場合、この関数は得られた各ファセットの属性の最新値を返します。
ヒント
複数のイベントまたはメトリクスが同じ最新のタイムスタンプを持つ場合、返される結果はランダムであり、クエリの実行ごとに異なる場合があります。より一貫した結果を得るには、これらのイベントまたはメトリクスに対して異なる値を持つ属性でファセットを作成してください。
このクエリは、PageViewイベントからユーザーエージェントごとに最新の国コードを返します。
SELECT latest(countryCode) FROM PageView FACET userAgentNamelatestrate()関数を使用して、最後の2つのデータポイントに基づく値の変化率を返します。問題となる属性を最初の引数として受け取り、結果である変化率の時間の単位を2番目の引数として受け取ります。この関数は結果をchange in attribute/time intervalの単位で返します。
この関数は、最先端の傾向を確認するために、属性の最新の変化率を提供するのに役立ちます。
このクエリは、最後の2つのデータポイントに基づいて期間の変化率を返します。1 SECOND引数であるため、duration/secondの単位で返されます。
SELECT latestrate(duration, 1 SECOND) FROM PageViewmax()関数を使用して、指定された時間範囲内に記録された数値属性の最大値を返します。引数として単一の属性名を取得します。属性の値が数字でない場合、集計の際に無視されます。クエリの条件に合うデータが見つからない場合、またはクエリにより数値が返されない場合は、null値を返します。
median()関数を利用して、属性の中央値あるいは50パーセンタイルを返します。パーセンタイルクエリの詳細に関しては、percentile()を参照してください。
このクエリは、中央値に関する折れ線グラフを生成します。
SELECT median(duration) FROM PageView TIMESERIES AUTOJOIN句の中央値:
中央値は単に
percentile(attribute, 50)のショートカットであるため、結合サブクエリからのmedian()の結果は複合データ型であり、50パーセンタイル値をその計算値にマップします。getField()関数を使用すると、外部クエリの実際の中央値を参照できます。マップされたキーは二重値の文字列表現であるため、median()の場合は'50.0'になります。
min()関数を使用して、指定された時間範囲内に記録された数値属性の最小値を返します。引数として単一の属性名を取得します。属性の値が数字でない場合、集計の際に無視されます。クエリの条件に合うデータが見つからない場合、またはクエリにより数値が返されない場合は、null値を返します。
percentage()関数を使用して、いくつかの条件に一致する目的のデータセットの割合を返します。
この関数は正確に2つの引数を必要とします (最初の2つ以降の引数は無視されます)。最初の引数には、対象属性に対する集計関数が必要です。属性が数値でない場合、この関数は100%の値を返します。2 番目の引数にはWHERE句が必要です。
FROM Transaction SELECT percentage(count(*), WHERE error is true ) AS 'Error Percent' WHERE host LIKE '%west%' EXTRAPOLATEpercentile()関数を使用して、所定の指定パーセンタイルでの属性の概算値を返します。この関数は属性が必須であり、パーセンタイル点を表す引数はいくつでも指定できます。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'です。
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分あたりのAPMトランザクションのスループット評価を示す折れ線グラフを生成する基本的なクエリを以下に示します。
SELECT rate(count(*), 10 minute) FROM TransactionSINCE 6 hours ago TIMESERIESここでは、さまざまな時間枠でデータを比較するために
rateを使用する方法を説明する短いビデオ(3分21秒)を紹介します。
stdvar()関数を使用して、指定された時間範囲内に記録された数値属性の標準分散を返します。
単一の引数を取ります。属性が数値でない場合は、ゼロを値として返します。
sum()関数を使用して、指定された時間範囲内に記録された数値属性の合計値を返します。
単一の引数を取ります。属性が数値でない場合は、ゼロを値として返します。
uniqueCount()関数を使用して、指定された時間範囲内に記録された属性のユニーク値の数を取得します。複数の属性値の一意の組み合わせをカウントするには、関数でそれらの属性を指定します。最大32個の属性を含めることができます。この関数は、precision引数なしで呼び出すと、最大256個のユニーク値の正確な結果を提供します。ユニーク値が256個を超える場合、結果は概算となります。正確な結果を得るために閾値を増やすには、256から50,000個の範囲内でprecision値を指定できます。ユニーク値が設定された閾値を超えると、関数はHyperLogLog確率的データ構造を使用して概算結果を提供します。
属性を指定してuniqueCount()関数を使用し、オプションで次のように精度引数を設定します。
uniqueCount(attribute, [, attribute [, ...]] [, precision: number])- プロパティ:ユニーク値をカウントする属性を指定するか、値の一意の組み合わせをカウントする複数の属性を指定します。最大32個の属性を指定できます。
- 精度:正確な結果の閾値を設定する数値を指定します。最大50,000までの値を設定できます。
precision引数のないクエリの例:
SELECT uniqueCount(accountId) FROM Transaction SINCE 1 day agoprecision引数を使用したクエリの例:
SELECT uniqueCount(appName, name, clusterName, precision: 1000) FROM Transaction SINCE 1 day agouniques()関数を使用して、指定された時間範囲内に記録された属性のユニーク値のリストを返します。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環境変数を参照してください。
BLOBタイプ属性でblob()関数を使用して、その属性のBase-64エンコード文字列を返します。
この機能には次の制限があります。
blob()への呼び出しを含むクエリの最大LIMIT値は20ですblob()クエリのWHERE句では呼び出すことができませんblob()ファセットクエリや時系列クエリでは使用できませんこれがログでどのように使用されるかについて詳しくは、長いログ(BLOB)内のデータの検索を参照してください。
Base-64でエンコードされたBLOBをデコードするには、
decode()関数を参照してください。SELECT message, blob(`newrelic.ext.message`)FROM Log WHERE newrelic.ext.message IS NOT NULL
buckets()関数を使用して、FACET句ごとに分割されたデータを、範囲に基づきバケットに集計します。New Relicデータベースの数値として保存される属性ごとにバケットにまとめることができます。
この関数は、以下の3つの引数を取ります。
属性名
サンプル範囲の最大値(外れ値は最終バケットに表示されます)
バケットの合計数
詳細と例については、データをバケットに分割を参照してください。
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')convert()関数を使用して、指定された入力値に対して指定された単位間の単位変換を実行します。
時間、長さ、重量、体積、データの一般的な単位と略語は、OpenTelemetry仕様に合わせてUCUM 標準を使用してサポートされています。便宜上、標準化された略語は、ft_us、kilobytes、およびµsに加えて、ftなどの自然言語の代替手段によって強化されています。
単位では大文字と小文字が区別されます。仕様で大文字が要求されない限り、すべての単位は小文字です。たとえば、データ単位'bits'はビットに対して有効ですが、'By'のバイトに対しては大文字のBが必要です。
最大の時間単位はユリウスyearで、常に365.25日です。
FROM Transaction SELECT convert(duration, 'ms', 'min') AS durationMinFROM Product SELECT convert(sum(itemWeight), 'grams', 'lbs')このクエリでは、イベント自体に文字列属性として単位情報が格納されており、値を秒に標準化したいと想定しています。
FROM Metric SELECT average(convert(apm.mobile.external.duration, unit, 's')) WHERE appName = 'my-application'capture()を使用して、RE2構文の正規表現を使用して属性から値を抽出します。
2つの引数が必要です。
属性名
キャプチャ構文を使用した正規表現(NRQLの正規表現はPythonのような構文
r'...'を使用します)キャプチャする場合は、RE2名前付きキャプチャ構文
...(?P<name> pattern )...は、指定された名前で、含まれるパターンをキャプチャします。複数の値をキャプチャするには、正規表現で追加のキャプチャグループを指定します。例:
...(?P<name1> pattern1)...(?P<name2> pattern2)...注:複数の値をキャプチャする場合、各キャプチャ文では最大16個のキャプチャグループ、各NRQLクエリでは最大5個のキャプチャ文を持つことができます。
正規表現キャプチャを使用してクエリ結果を改善する方法をお読みください。
ヒント
正規表現は入力全体と一致する必要があります。キャプチャ式が期待される結果を抽出しない場合は、最初または最後に
.*が必要かどうかを確認します。これは、部分一致正規表現のパターンです。ただし、部分一致正規表現は、クエリの実行を遅らせることがあります。capture()を使用して、ダッシュボードの読みやすさを向上する方法を紹介する短いビデオ(3分05秒)もあります。詳しくは、以下の例をご覧ください。
以下では、ウェブサイトのドメイン名を選択し、
https://とに続くパスを削除します。.comSELECT capture(pageUrl, r'https://(?P<baseUrl>.*.com)/.+')FROM PageView SINCE 1 day ago以下では、エラーメッセージの最初のワードのみがキャプチャされます。
SELECT capture(errorMessage, r'(?P<firstWord>\S+)\s.+')FROM TransactionWHERE errorMessage IS NOT NULLSINCE 1 hour agoキャプチャしたHTTPメソッドによって、以下がファセットされます。
SELECT count(*) FROM LogWHERE message LIKE '%HTTP%'FACET capture(message, r'.* "(?P<httpMethod>[A-Z]+) .*')以下は、キャプチャされたジョブ名が
ExampleJobである正規表現と一致するmessage属性を持つログイベントに基づいて、結果をフィルター処理します。SELECT message FROM LogWHERE 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 LogWHERE 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環境変数の詳細については、こちらをご覧ください。
decode()を使用して、文字列とBLOBに対してBase-64変換を実行します。入力値(最初の引数)は、エンコーディング(2番目の引数)で指定されたBase-64標準を使用してデコードされます。
次の文字列値は、サポートされているエンコードパラメーターです。
「base64」:RFC4648 Base-64標準を使用
「base64mime」:RFC2045 Base-64 標準(MIME)を使用
「base64url」:URLおよびファイル名に安全なアルファベットを用いたRFC4648 Base-64標準を使用
blob()WHEREまたはFACET句では許可されないため、BLOBタイプのdecode()、WHERE句またはファセットクエリではサポートされません。文字列をエンコードするには、
encode()関数を参照してください。FROM Span SELECT entity.guid, decode(entity.guid, 'base64')WHERE entity.guid IS NOT NULLFROM Span SELECT count(*)WHERE entity.guid IS NOT NULLFACET entity.guid, decode(entity.guid, 'base64')FROM Span SELECT count(*)WHERE entity.guid IS NOT NULLAND decode(entity.guid, 'base64') NOT LIKE '%APM%'FROM LogWITH blob(`newrelic.ext.message`) AS encodedBlob,decode(encodedBlob, 'base64') AS decodedBlobSELECT encodedBlob, decodedBlobWHERE newrelic.ext.message IS NOT NULLLIMIT 10
dimensions()関数を使用して、データ型のすべての次元値を返します。
オプションの引数を使用して、以下の特定の属性を明示的に含めたり、除外したりできます。
include:存在する場合、includeリストの属性はdimensions()に限定されます。exclude:存在する場合、dimensions()の計算ではそれらの属性は無視されます。FROM Metric SELECT count(node_filesystem_size)TIMESERIES FACET dimensions()FACET句とともに使用する場合、dimensions()は、未集計クエリでのPrometheusの動作と同様に、イベントタイプで使用できるすべてのファセットについて一意の時系列を生成します。
encode()を使用して、文字列に対してBase-64変換を実行します。入力値(最初の引数)は、エンコーディング(2番目の引数)で指定されたBase-64標準を使用してエンコードされます。
次の文字列値は、サポートされているエンコードパラメーターです。
「base64」:RFC4648 Base-64標準を使用
「base64mime」:RFC2045 Base-64 標準(MIME)を使用
「base64url」:URLおよびファイル名に安全なアルファベットを用いたRFC4648 Base-64標準を使用
文字列またはBLOBをデコードするには、
decode()関数を参照してください。encode()はBLOBではサポートされていません。FROM PageView SELECT session, encode(session, 'base64')
cidrAddress()関数を使用して、CIDR IPアドレスからベースネットワークアドレスを取得します。
cidrAddress() 次の引数を取ります。
attribute- IPアドレスそのもの、またはCIDR表記のプレフィックス長を含む文字列値。- これには、文字列属性または引用符で囲まれた文字列リテラルを指定できます
- IPアドレスはIPv4アドレスである必要があります
number- プレフィックスの長さを表す整数値。- これは、整数属性または整数値です
- 属性パラメーターがCIDR表記である場合、このパラメーターはオプションであり、CIDR文字列で指定されたプレフィックス長よりも優先されます
cidrFormat- ネットワークアドレス出力をCIDR表記形式にするかどうかを決定するために使用されるオプションのブール値。これはデフォルトでtrueになります。cidrAddress()関数は、属性パラメーターと数値パラメーターに有効なIPアドレスとプレフィックス長が含まれている限り、値を返します。パラメーター入力が無効な場合、cidrAddress()nullを返します。次のクエリは、 SyntheticRequestイベントタイプからのほとんどのリクエストを処理しているサブネットを返します。
FROM SyntheticRequest SELECT count(*) FACET cidrAddress(serverIPAddress, 24)これにより、次のような形式で回答が返されます。
Cidr Address of Server IPAddress
Count
10.0.0.0/24
6k
10.10.1.0/24
4k
10.0.14.0/24
1k
このクエリは、10.0.0.0~10.0.0.255のCIDR範囲内に存在する、
serverIPAddress属性のすべてのIPアドレスを返します。FROM SyntheticRequest SELECT uniques(serverIPAddress)WHERE cidrAddress(serverIPAddress, 24) = '10.0.0.0/24'このクエリは、CIDR範囲10.0.0.0/24または10.10.1.0/24に該当する
serverIPAddress値を含むレコードを除外しながら、すべてのレコードの数を返します。FROM SyntheticRequest SELECT count(*)WHERE cidrAddress(serverIPAddress, 24) NOT IN ('10.0.0.0/24', '10.10.1.0/24')
...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() TIMESERIESgetField()関数を使用して、配列から要素を抽出したり、ディメンションメトリクスデータなどの複合データ型からフィールドを抽出したりできます。
getField() 次の引数を取ります。
attribute- 配列または複合データ型。field- 配列要素のインデックスまたは複合データ型のフィールド名。角括弧
[ ]getField()の省略形として使用することもできます。重要
配列のインデックスは
0から始まります。例\
durations属性に格納されている配列[100, 110, 90, 100, 105]を検討します。以下のクエリは90を返します。SELECT getField(durations, 2) FROM FoogetField()省略表記を使用した次のクエリも90を返します。SELECT durations[2] FROM Fooサポートされている複合データ型とそのフィールドは次のとおりです。
メトリックタイプ
サポートされているフィールド
summarycount、total、max、min、typegaugecount、total、max、min、latest、typedistributioncount、total、max、min、typecountcount、typecumulativeCountcount、cumulative、typetimeslicecount、total、totalExclusive、min、max、sumOfSquares例
SELECT max(getField(mySummary, count)) FROM MetricSELECT sum(mySummary) FROM Metric where getField(mySummary, count) > 10getField()の省略表記を使用したクエリ:SELECT max(mySummary[count]) FROM Metric
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つの引数が必要です。
condition-trueまたはfalseで評価できる式。falsetrueValue- ブール式が true の場合、この値が返されます。truefalseValue- ブール式が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'))
JSON解析関数jparse()を使用して文字列値を解析し、NRQLの他のファーストクラスの値型と同様に処理できる値のマップ/リスト(またはネストされた構造)を生成します。
jparse() 次の2つの引数が必要です。
attribute- JSON文字列値。path-attributeパラメーター内のJSONの特定の部分を直接参照するために使用されるオプションの文字列値。以下のJSON解析パス構文リファレンスのセクションを参照してください。jparse()関数は、RFC 8259形式に従って JSON値を解析します。jparse()関数をpathパラメーターなしで使用すると、逆シリアル化されたJSON値が返されます。角括弧を使用すると、キー/インデックスを介して
jparse()の結果から個々の値を抽出し、WITH句を使用してJSONキーを属性に直接マッピングできます。Referencing a key
次のクエリは、
jsonString属性内のキーuserNamesを参照し、['abc', 'xyz']を返します。WITH '{"userNames": ["abc", "xyz"]}' AS jsonString SELECT jparse(jsonString)[userNames]Referencing an index
次のクエリは、
jsonString属性内のインデックス0を参照し、'abc'を返します。WITH '["abc", "xyz"]' AS jsonString SELECT jparse(jsonString)[0]次のクエリでは、
WITH句でjparse()を使用してJSONキーuserNameとidをNRQL変数にマップし、クエリの残りの部分で使用できるようにします。WITH '{"userName": "test", "unused": null, "id": 100}' AS jsonString, jparse(jsonString) AS (userName, id) SELECT userName, idJSON文字列から特定の値を解析するには、
pathパラメーターを使用できます。JSONデータは、単純ではない形状で複数のレイヤーにネストされるのが一般的です。パス構文を使用すると、JSONデータの特定の部分を直接参照できます。
データ例:
{"valueA": "test","valueB": {"nestedValue1": [1, 2, 3],"nestedValue2": 100},"valueC": [{ "id": 1, "label": "A", "other": 7 },{ "id": 2, "label": "B", "other": 9 },{ "id": 3, "label": "C", "other": 13 }]}上記のデータを使用したパス構文の例:
Path Syntax Example
Result Description
Result
valueAキーの値を返します
"test"["valueA"]キーの値を返します
"test"[valueA, valueC]キー値のリストを返します
["test", [{"id": 1…}, {"id": 2…}], {"id": 3…}]]valueB.nestedValue2キーの値を返します
100valueC[0]インデックス0のリスト値を返します。
0{"id": 1…}valueC[0,2]インデックス
0および{2}のリスト値を返します。2[{"id": 1…}, {"id": 3…}]valueC[0:2]2番目のインデックスの値を除いた、最初のインデックスから2番目までのリスト値の範囲を返します。この場合、インデックス
0と1のリスト値が返されます。[{"id": 1…}, {"id": 2…}]valueC[:2]2番目のインデックスの値を除いた、先頭から2番目のインデックスまでのリスト値の範囲を返します。この場合、インデックス
0と1のリスト値が返されます。[{"id": 1…}, {"id": 2…}]valueC[:-2]最後のnを除くすべてのリスト値を返します。ここで、nはコロンの後の負の数です(つまり
[:-n])。この場合、インデックス0のリスト値が返されます。[{"id": 1…}]valueC[1:]指定されたインデックスからリストの末尾までのリスト値の範囲を返します。この場合、インデックス
1と2のリスト値が返されます。[{"id": 2…}, {"id": 3…}]valueC[-1:]*最後のn個のリスト値を返します。ここで、n*はコロンの前の負の数です(つまり、
[-n:])。この場合、インデックス2のリスト値が返されます。[{"id": 3…}]valueC[*]すべてのリスト値を返します
[{"id": 1…}, {"id": 2…}, {"id": 3…}]valueC[*].idすべてのリストメンバーから指定されたキー値を返します。この場合、「
id」キーの値です。[1, 2, 3]valueC[*]["label", "other"]すべてのリストメンバーから指定されたキーを返します。この場合、「
label」キーおよび「other」の値です。[["A", 7],…]例:
次のクエリは、
jsonString属性内のJSON文字列を解析します。WITH '{"user": {"name": "John", "id": 5}}' AS jsonString SELECT jparse(jsonString)このクエリは、逆シリアル化されたJSON文字列を返します。
{ "user": { "name": "John", "id": 5 } }よくある問題は、ログメッセージ内に構造化された豊富なデータが隠れていることです。
aparse()とjparse()を利用してノイズを取り除き、特定の値を見つけることができます。次のクエリ:
aparse()を呼び出して、logMessage属性からJSONデータを抽出します。jparse()とuser.nameパスパラメーターを使用して、抽出されたJSONデータからuser.nameフィールドを解析します。WITH '1693242121842: value=\'{"user": {"name": "John", "id": 5}}\', useless=stuff' AS logMessage, aparse(logMessage, '%: value=\'*\'%') AS jsonString SELECT jparse(jsonString, 'user.name')
次のクエリは、
jsonString属性内のオブジェクトのリストから各idフィールドを解析し、これらの値を配列として出力します。WITH '{"users": [{"name": "A", "id": 5}, {"name": "B", "id": 10}]}' AS jsonString, jparse(jsonString, 'users[*].id') AS ids SELECT ids上記のクエリは
[5, 10]を返します。関連関数:
mapKeys()、mapValues()
length()関数を使用して、文字列値の長さまたは配列値の要素数を返します。
単一の引数を取ります。
このクエリは、PageViewイベントから各URL文字列の長さを返します。
SELECT length(pageUrl) FROM PageViewcountries属性に格納されている配列["US", "CA", "UK"]を検討します。
SELECT length(countries) FROM Foo上記のクエリのlength(countries)は3を返します。
配列内に要素が存在するかどうかを確認するには、 contains()関数を使用します。
contains() 次の引数を取ります。
attribute- 配列element- 配列を確認する要素guids属性に格納されている配列["9999-1234-9999", "3333-7890-3333", "5555-3456-555"]を検討します。SELECT contains(guids, '5555-3456-555') FROM Foocontains(guids, '5555-3456-555')上記のクエリではTRUEを返します。Transactionイベントタイプ内のguids属性に格納されている配列["9999-1234-9999", "3333-7890-3333", "5555-3456-555"]を検討します。SELECT count(*) FROM Transaction WHERE contains(guids, '9999-1234-9999')上記の記述は、
"9999-1234-9999"guidを含む一連のカウントを返します。
ルックアップテーブルをアップロードした場合、テーブル名でこの機能を使用すると、クエリ内テーブルのデータにアクセスできます。クエリの例を以下に示します。
FROM LogSELECT count(*)WHERE hostname IN (FROM lookup(myHosts) SELECT uniques(myHost))詳細については、ルックアップテーブルデータのクエリ方法を参照してください。
lower()関数を使用して、文字列値のアルファベット文字をすべて小文字に変更します。
引数:
str- 小文字にする文字列値。- これは、引用符内のリテラル文字列、クエリされた文字列属性、文字列を返す関数、または単一の文字列値を返すサブクエリなどの文字列に評価されるものなら何でもかまいません。
- この引数がnullと評価される場合は、
lower()関数はnullを返します。
関連機能:
upper()
attributeパラメーター内の入力としてマップが指定された場合、mapKeys()関数を使用してキーのリストを返します。
WITH '{"userResult1": 100, "userResult2": 200, "userResult3": 4}' AS jsonString SELECT mapKeys(jparse(jsonString)) AS keys上記のクエリ:
jparse()関数を使用して、jsonString属性内のJSON文字列をマップに逆シリアル化するmapKeys()関数を呼び出して、このマップ内のすべてのキーのリストを抽出する- このキーのリストを
keys属性にバインドする
上記のクエリを実行すると、keysにはリスト['userResult1', 'userResult2', 'userResult3']が含まれます。
WITH '{"value1": "test", "value2": {"nestedValue1": [1, 2, 3], "nestedValue2": 100}}' AS jsonString SELECT mapKeys(jparse(jsonString)) AS keys上記のクエリは、jsonString属性内のJSON文字列から最も外側のキーのみを抽出します。クエリを実行すると、keysにはリスト['value1', 'value2']が含まれます。
attributeパラメーター内の入力としてマップが指定された場合、mapValues()関数を使用して値のリストを返します。
WITH '{"userResult1": 100, "userResult2": 200, "userResult3": 4}' AS jsonString SELECT mapValues(jparse(jsonString)) AS values上記のクエリ:
jparse()関数を使用して、jsonString属性内のJSON文字列をマップに逆シリアル化するmapValues()関数を呼び出して、このマップ内のすべての値のリストを抽出する- この値のリストを
values属性にバインドする
上記のクエリを実行すると、valuesにはリスト[100, 200, 4]が含まれます。
WITH '{"value1": "test", "value2": {"nestedValue1": [1, 2, 3], "nestedValue2": 100}}' AS jsonString SELECT mapValues(jparse(jsonString)) AS values上記のクエリは、jsonString属性内のJSON文字列から最も外側の値を抽出します。クエリを実行すると、valuesには"test"文字列とネストされたオブジェクトのリストが含まれます。
これはJSONビューで確認できます。
"contents": [ { "function": "alias", "alias": "values", "contents": { "constant": [ "test", { "nestedValue1": [ 1, 2, 3 ], "nestedValue2": 100 } ] } }],minuteOf()関数を使用して、有効なタイムスタンプ値を持つ属性の分の部分(つまり、0〜59分)のみを抽出します。これは、hourOf()、weekOf()などの関数でも機能します。時間ベースの関数の完全なリストについては、時間範囲で結果をグループ化のドキュメントの表を参照してください。
与えられた数値属性の値(最初の引数、すなわち被除数)を数値(2つ目の引数、すなわち除数)で割った後、mod()関数を使用してfloor係数を返します。このモジュロ演算は、WHERE句の条件内で使用して結果の任意のサブセットにフィルターしたり、FACET句で結果セットをさらに分割したりする方法として使用できます。
FROM Transaction SELECT * WHERE mod(port, 2) = 1FROM NrConsumption SELECT uniques(hostId, 10000) SINCE 1 day AGO FACET mod(hostId, 10)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 PathEnd
position(str, substr [, occurrence])例
round()関数を使用して、属性の丸め値を返します。
オプションで、round()は2番目の引数to_nearestを取り、最初の引数を2番目の引数の最も近い倍数に切り上げます。to_nearestは分数にすることができます。
SELECT round(n [, to_nearest])stddev()関数を使用して、指定された時間範囲内に記録された数値属性の標準偏差値を返します。単一の引数を取ります。属性が数値でない場合は、ゼロを値として返します。
abs()関数を使用して、 attributeの絶対値を返します。
floor()関数を使用して、切り捨てによりattributeに最も近い整数を返します。
ceil()関数を使用して、切り上げてattributeに最も近い整数を返します。
clamp_max()関数を使用して、 attributeの値に上限を設定します。
clamp_max() 次の引数を取ります。
attribute- 数値属性。limit-attribute値の上限。例\
clamp_max()を使用すると、外れ値によって時系列グラフのスケールが歪まないようにすることができます。SELECT clamp_max(average(duration), 10) FROM Transaction TIMESERIES上記のクエリは、10を超えない限り
durationを返しますが、10を超える場合は10を返します。
clamp_min()関数を使用して、 attributeの値に下限を設定します。
clamp_min() 次の引数を取ります。
attribute- 数値属性。limit-attribute値の下限。例\
clamp_min()を使用すると、外れ値によって時系列グラフのスケールが歪まないようにすることができます。SELECT clamp_min(average(duration), 1) FROM Transaction TIMESERIES上記のクエリは、1未満の場合は1を返しますが、1未満の場合は
durationを返します。
pow()関数を使用して、 attributeをexponent累乗します。
pow() 次の引数を取ります。
attribute- 数値属性。exponent-attributeを累乗する数値属性。例\ 以下のクエリは、
durationの4乗を返します。SELECT pow(duration, 4) FROM Transaction
sqrt()関数を使用して、 attributeの平方根を返します。
exp()関数を使用して、 attributeの自然指数関数を返します。
ln()関数を使用して、 attributeの自然対数を返します。
log2()関数を使用して、 attributeの2を底とする対数を返します。
log10()関数を使用して、 attributeの10を底とする対数を返します。
log()関数を使用して、底がbaseであるattributeの対数を計算します。
log() 次の引数を取ります。
attribute- 数値属性。base-attributeの対数を計算するときに底として使用する数値属性。例\ 以下のクエリは、4を底とする
durationの対数を計算します。SELECT log(duration, 4) FROM Transaction
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- 文字列から抽出する部分文字列の長さまたは文字数。- オプション - 長さが指定されていない場合、解決された開始位置の後の文字列のすべての文字が含まれます。
position()とsubstring()を一緒に使用する例については、position()関数を参照してください。
toDatetime()関数を使用して、タイムスタンプを書式設定されたdatetime文字列に変換します。
toDatetime() 次の引数を取ります。
timestamp- datetime文字列に変換される数値タイムスタンプ。これは数値または属性にすることができ、内部的にlongに変換されます。pattern- 結果のフォーマットに使用されるオプションの日時パターン。パターン文字列の構築方法については、DatetimeFormatterドキュメントの書式設定と解析のパターンのセクションを参照してください。- これは定数文字列値である必要があり、パターンが指定されていない場合はデフォルトの
yyyy-MM-dd'T'HH:mm:ss.SSSXXXになります
- これは定数文字列値である必要があり、パターンが指定されていない場合はデフォルトの
timezone- datetime文字列を解釈するために使用されるオプションのタイムゾーン値(例:UTC)。- これは定数文字列値である必要があり、デフォルトはUTC、または利用可能な場合は
WITH TIMEZONEで指定された値になります
入力が有効な数値である限り、
toDatetime()関数は常に値を返します。Alias:
fromTimestamp()はtoDatetime()関数の代替名です。例:
次のクエリは、デフォルトのパターン
yyyy-MM-dd'T'HH:mm:ss.SSSXXXを使用してtimestampValue属性を変換します。これにより、datetime文字列1970-01-01T00:20:34.567Zが返されます。WITH 1234567 AS timestampValue SELECT toDatetime(timestampValue)次のクエリは、タイムゾーンが「America/Los_Angeles」に設定されたパターン文字列
yyyy-MM-ddを使用して、timestampValue属性を変換します。これにより、datetime文字列1969-12-31が返されます。WITH 1234567 AS timestampValue SELECT toDatetime(timestampValue, 'yyyy-MM-dd', timezone:'America/Los_Angeles')次のクエリは、
WITH TIMEZONE句で指定されたタイムゾーンを使用してtimestampValue属性を変換します。これにより、datetime文字列1969-12-31が返されます。WITH 1234567 AS timestampValue SELECT toDatetime(timestampValue, 'yyyy-MM-dd') FROM Event WITH TIMEZONE 'America/Los_Angeles'- これは定数文字列値である必要があり、デフォルトはUTC、または利用可能な場合は
toTimestamp()関数を使用して、datetime文字列からタイムスタンプをエポックミリ秒単位で解析します。
toTimestamp() 次の引数を取ります。
datestring- タイムスタンプ(エポックミリ秒)に変換されるdatetime文字列。これには、文字列属性または引用符で囲まれた文字列リテラルを指定できますpattern- datestringパラメーターの解析に使用されるオプションの日時パターン。パターン文字列の構築方法については、DatetimeFormatterドキュメントの書式設定と解析のパターンのセクションを参照してください。- これは定数文字列値である必要があり、パターンが指定されていない場合はデフォルトの
yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]になります
- これは定数文字列値である必要があり、パターンが指定されていない場合はデフォルトの
timezone- datestringパラメーターを解釈するために使用されるオプションのタイムゾーン値(例:PST)。- これは定数文字列値である必要があり、デフォルトはUTC、または利用可能な場合は
WITH TIMEZONEで指定された値になります
Alias:
fromDatetime()はtoTimestamp()関数の代替名です。ヒント
見つかった文字列が指定されたパターンと一致しない場合は、
nullが返されます。さまざまなパターンのdatetime文字列がある場合は、ORを使用して値の 1 つがnull以外になるまでカスケードすることにより、結果を結合できます。オプションのパターンセグメントを使用することもできます。デフォルトのパターンでは、角括弧を使用して、ミリ秒とゾーンオフセットの部分をオプションにします。シナリオ
詳細
サンプルパターン
サンプル日時
解決後
タイムゾーンがありません
タイムゾーン引数、または
WITH TIMEZONE値を使用します。デフォルトはUTCです。yyyy-MM-dd HH:mm:ss.SSS
2023-10-18 15:27:03.123
2023-10-18T15:27:03.123Z
日時フィールドがありません
欠落している時刻フィールドは0に置き換えられます。欠落している日付フィールドは1に置き換えられます。フィールドが存在する場合は、より優先順位の高いフィールドもすべて存在する必要があります。
注:日付と四半期のパターンがサポートされています。yyyy-MM-dd HH:mm:ss
2023-10-18 15:27:03
2023-10-18T15:27:03.000Z
yyyy-MM-dd HH:mm
2023-10-18 15:27
2023-10-18T15:27:00.000Z
yyyy-MM-dd HH
2023-10-18 15
2023-10-18T15:00:00.000Z
yyyy-MM-dd
2023-10-18
2023-10-18T00:00:00.000Z
yyyy 'day' D
2023 day 291
2023-10-18T00:00:00.000Z
yyyy-MM
2023-10
2023-10-01T00:00:00.000Z
yyyyqqq
2023 Q4
2023-10-01T00:00:00.000Z
yyyy
2023
2023-01-01T00:00:00.000Z
時間のみ
日付なしで時刻パターンが使用された場合、ミリ秒単位のUnixタイムスタンプが計算されます。
注:タイムゾーンの調整は引き続き適用されます。HH:mm
00:30
1971-01-01T00:30:00.000Z
HH:mm O
00:30 GMT-1
1971-01-01T01:30:00.000Z
HH:mm O
00:30 GMT+1
1969-12-31T23:30:00.000Z
12時間
12時間パターン(小文字のh)が使用される場合は、am/pmのパターン(a)も使用する必要があります。
注:datetime文字列内ではAM/PMは大文字である必要があります。yyyy-MM-dd h:mm a
2023-10-18 3:27 PM
2023-10-18T15:27:00.000Z
yyyy-MM-dd h:mm
2023-10-18 3:27
サポートされていないパターン
yyyy-MM-dd h:mm a
2023-10-18 3:27 pm
null(pmが小文字のため)
フィールドの優先順位
フィールドが存在する場合は、より優先順位の高いフィールドもすべて存在する必要があります。
yyyydd
2023 18
サポートされていないパターン(ddは月の日であり、月が欠落しています)
例:
次のクエリは、デフォルトのパターン
yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]を使用して、datetime文字列「2023-10-18T15:27:03.123Z」を解析します。これにより、タイムスタンプ値1697642823123が返されます。SELECT toTimestamp('2023-10-18T15:27:03.123Z')FROM Event次のクエリは、タイムゾーンを「America/Los_Angeles」に設定してdatetime文字列「2023-11-03 11:00:32」を解析します。これにより、タイムスタンプ値
1699034432000が返されます。SELECT toTimestamp('2023-11-03 11:00:32', 'yyyy-MM-dd HH:mm:ss', timezone:'America/Los_Angeles')FROM Event次のクエリは、
WITH TIMEZONE句で指定されたタイムゾーンを使用して、datetime文字列「2023-11-03 11:00:32」を解析します。これにより、タイムスタンプ値1699034432000が返されます。SELECT toTimestamp('2023-11-03 11:00:32', 'yyyy-MM-dd HH:mm:ss')FROM Event WITH TIMEZONE 'America/Los_Angeles'重要
UIは、
toTimestamp()値をタイムスタンプとして自動的に検出し、日時値としてフォーマットします。実際の数値タイムスタンプを表示するには、toTimestamp()関数をstring()関数でラップします。- これは定数文字列値である必要があり、デフォルトはUTC、または利用可能な場合は
upper()関数を使用して、文字列値のアルファベット文字をすべて大文字に変更します。
引数:
str- 大文字にする文字列値。これは、引用符内のリテラル文字列、クエリされた文字列属性、文字列を返す関数、または単一の文字列値を返すサブクエリなどの文字列に評価されるものなら何でもかまいません。
この引数がnullと評価される場合は、
upper()関数はnullを返します。関連関数:
lower()
データ型変換
NRQLは「型強制」をサポートしていません。つまり、文字列として保存されたフロートは文字列として取り扱われ、フロート値を要求する関数に渡しても操作できません。
以下に示す関数で、数値を伴う文字列、または文字列を伴うブーリアン値を同等の数値またはブーリアン値に変換したり、文字列以外の値を文字列値に変換したりできます。
numeric()関数を使用して、文字列形式の数値を数値に変換します。この関数は、クエリ結果に対して数学関数を使用するクエリ、またはaverage()などの NRQL集計関数に組み込むことができます。NRQLの値がゲージ形式の場合、numeric()は機能しないことに注意してください。代わりに、次の互換性のあるクエリ関数のいずれかを使用する必要があります。latest()min()max()sum()count()average()boolean()関数を使用して、"true"または"false"の文字列値を対応するブーリアン値に変換します。string()関数を使用して、数値、ブーリアン値、タプル値、または配列値を文字列値に変換します。詳細については、上記のstring()を参照してください。
コメント
NRQLクエリを記述する際にコメントを追加すると、チームメンバーがクエリをさらに理解して使用できるようになります。
構文の詳細は以下のとおりです。
--2つのダッシュは、同じ行にあるこのインジケーターの右側にあるすべてのテキストをコメントアウトします。//2つのスラッシュは、同じ行にあるこのインジケーターの右側にあるすべてのテキストをコメントアウトします。/* */これらの文字セットの間にあるテキストはすべてコメントアウトされます。このインジケーターは複数の行に適用できます。
コメントはどこにでも表示されるわけではありません。「最近のクエリ」や「クエリを表示」などの一部のビューにはコメントは表示されません。
コメントを含むクエリの例:
FROM Transaction SELECT uniqueCount(appId) -- This will return the number of unique App IDsFROM TransactionErrorSELECT count(*) SINCE 1 day ago // Transaction Error for the past dayFROM TransactionTrace /* This data may be incomplete;If so, run a query of Transaction */SELECT count(*)関連ドキュメント
NRQL構文とルールを理解するためのその他の人気リソースには、以下が含まれます。
- New Relic UniversityのNRQL教育コース
Metricデータ型のクエリ方法を習得- サブクエリを使用
- ファネルを使用して一連の関連データを評価する






