はじめに
New Relicのクエリ言語NRQLの2024年1月のアップデートで、JSONを柔軟に解析できる新しい関数が登場しました!この記事ではそれぞれの関数の使い方を紹介します!
このアップデートの詳細はこちら
What's new
その他アップデートの詳細はこちら
New Relic アップデート(2024年1月)
New Relic アップデート一覧
新関数の使い方を確認
今回、登場した関数は以下になります。
関数名 | 機能内容 |
---|---|
jparse() | JSONを解析し、値のマップ/リスト(またはネストされた構造)を生成します |
mapKeys() | 解析されたJSONからキーを返します |
mapValues() | 解析されたJSONから値を返します |
各関数の使い方を見ていきます!
jparse()
jparse() は、 文字列値を受け取り、値のマップまたはリスト (またはネストされた構造) を生成します。
例えば、下記のクエリでは、指定されたJSONデータから ID、名前、および特定の値を抽出します。
WITH '{"users": [{"name": "Hello", "id": 435}, {"name": "World", "id": 436}, {"name": "GetThisName", "id": 500}]}' as jsonString,
jparse(jsonString, 'users[*].id') as ids,
jparse(jsonString, 'users[*].name') as names,
jparse(jsonString, 'users[2].name') as getSpecificValue
SELECT ids, names, getSpecificValue
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3485441%2F4f6139e1-926c-19c7-bc83-c3cbe81a6eb3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=fb984b8b611796cc82306bd25a8ea708)
aparse() を使って、ログのmessageからJSONデータを抽出し、jparse()で特定の値を抽出してみます。
WITH '1693242121842: value=\'{"user": {"name": "John", "id": 5}}\', useless=stuff' as logMessage,
aparse(logMessage, '%: value=\'*\'%') AS jsonString
SELECT jparse(jsonString, 'user.name') AS Name
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3485441%2Fcc909733-230c-4aa9-512a-7de024debaf6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b81938ae84bb3df8ce718f87b65883f6)
mapKeys()
mapKeys()は、 マップが渡されると、すべてのキーのリストを抽出します。
WITH '{"Field1": "exampleString", "Field2": false, "Field3": 100}' AS jsonString
SELECT mapKeys(jparse(jsonString)) AS keys
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3485441%2F3770ad18-767d-f322-c12f-e8bc0288c515.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=65d26c8422a3c6c051ee0d47ace4d57a)
ネストされたキーを含むJSONデータからキーのリストを抽出します。
WITH '{"value1": "test", "value2": {"nestedValue1": [1, 2, 3], "nestedValue2": 100}}' as jsonString
SELECT mapKeys(jparse(jsonString)) AS keys
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3485441%2Ff3236d53-d461-cb21-fb20-16e5882dafe1.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=dfb11d255172fc5e53a42087c5740492)
mapValues()
mapValues() は、マップが入力として渡されると、すべての値のリストを抽出します。
WITH '{"Field1": "exampleString", "Field2": false, "Field3": 100}' AS jsonString
SELECT mapKeys(jparse(jsonString)) as values
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3485441%2F77bba3b7-fecf-25c8-a955-c8343276523e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b51115831aa8e0a52965c8da5832b4c7)
ネストされたキーを含むJSONデータから値のリストを抽出します。
WITH '{"value1": "test", "value2": {"nestedValue1": [1, 2, 3], "nestedValue2": 100}}' as jsonString
SELECT mapValues(jparse(jsonString)) AS values
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3485441%2Fcca91a9e-5fdd-2c7b-c4b2-71e006408014.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e84e4e1e06a406b562635e5d463dc905)
まとめ
今回、2024年1月の機能アップデートで登場したjparse() 、mapKeys() 、mapValues()のNQRLクエリ関数の使い方を紹介させていただきました。ログに含まれるJSONから必要なデータを簡単に抽出して、ダッシュボードで分析したり、アラート条件に指定するなどできますのでご活用ください!!
このアップデートの詳細はこちら
What's new
その他アップデートの詳細はこちら
New Relic アップデート(2024年1月)
New Relic アップデート一覧
New Relic株式会社のQiita OrganizationOrganizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。