JSON_EXTRACT_PATH_TEXT 関数 - Amazon Redshift

JSON_EXTRACT_PATH_TEXT 関数

注記

JSON_PARSE および関連する関数は、JSON 値を SUPER として解析します。Amazon Redshift は、VARCHAR よりも SUPER をより効率的に解析します。

JSON_EXTRACT_PATH_TEXT を使用する代わりに、JSON_PARSE 関数 を使用して JSON 文字列を解析し、SUPER 値を取得することをお勧めします。次に、value.attribute 構文を使用する対象の要素をクエリします。SUPER 値の配列要素に対するクエリ実行の詳細については、「半構造化データのクエリ」を参照してください。

JSON_EXTRACT_PATH_TEXT 関数は、JSON 文字列内の一連のパス要素から参照されるキーと値のペアを値として返します。JSON パスは、最大 5 レベルの深さまでネストできます。パス要素では、大文字と小文字が区別されます。JSON 文字列にパス要素が存在しない場合、JSON_EXTRACT_PATH_TEXT は NULL を返します。

null_if_invalid の引数が true に設定され、JSON 文字列が無効になっている場合、この関数はエラーを返す代わりに NULL を返します。

JSON_EXTRACT_PATH_TEXT のデータサイズは最大 64 KB です。JSON レコードのサイズが 64 KB を超えると、JSON_EXTRACT_PATH_TEXT での処理エラーになります。

その他の JSON 関数については、「JSON 関数」を参照してください。JSON の操作方法の詳細については、「JSON 形式からの COPY」を参照してください。

構文

JSON_EXTRACT_PATH_TEXT('json_string', 'path_elem' [,'path_elem'[, …] ] [, null_if_invalid ] )

引数

json_string

正しくフォーマットされた JSON 文字列。

path_elem

JSON 文字列内のパス要素。1 つのパス要素が必要です。パス要素は、最大 5 レベルの深さまで、追加で指定できます。

null_if_invalid

(オプション) 入力 JSON 文字列が無効である場合に、エラーを返す代わりに NULL を返すかどうかを指定する BOOLEAN 値。JSON が無効な場合に NULL を返すには、true (t) を指定します。JSON が無効な場合にエラーを返すには、false (f) を指定します。デフォルト: false

JSON 文字列では、Amazon Redshift は \n を改行文字として、\t をタブ文字として認識します。バックスラッシュをロードするには、バックスラッシュをバックスラッシュでエスケープします (\\)。詳細については、「JSON のエスケープ文字」を参照してください。

戻り型

VARCHAR

パス要素から参照される JSON 値を表す VARCHAR 文字列。

パス 'f4', 'f6' の値を返すには、次の例を使用します。

SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}','f4', 'f6'); +------------------------+ | json_extract_path_text | +------------------------+ | star | +------------------------+

JSON が無効であるためエラーを返すには、次の例を使用します。

SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6'); ERROR: invalid json object {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}

null_if_invalidtrue に設定し、ステートメントがエラーを返す代わりに NULL を返すようにするには、次の例を使用します。

SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6',true); +------------------------+ | json_extract_path_text | +------------------------+ | NULL | +------------------------+

パス 'farm', 'barn', 'color' の値を返すには (取得される値は第 3 レベルにある)、次の例を使用します。読みやすくするために、このサンプルは JSON Lint ツールを使用してフォーマットされています。

SELECT JSON_EXTRACT_PATH_TEXT('{ "farm": { "barn": { "color": "red", "feed stocked": true } } }', 'farm', 'barn', 'color'); +------------------------+ | json_extract_path_text | +------------------------+ | red | +------------------------+

'color' 要素がないため NULL を返すには、次の例を使用します。このサンプルは JSON Lint ツールでフォーマットされています。

SELECT JSON_EXTRACT_PATH_TEXT('{ "farm": { "barn": {} } }', 'farm', 'barn', 'color'); +------------------------+ | json_extract_path_text | +------------------------+ | NULL | +------------------------+

JSON が有効な場合、欠落している要素を抽出しようとすると NULL が返されます。

パス 'house', 'appliances', 'washing machine', 'brand' の値を返すには、次の例を使用します。

SELECT JSON_EXTRACT_PATH_TEXT('{ "house": { "address": { "street": "123 Any St.", "city": "Any Town", "state": "FL", "zip": "32830" }, "bathroom": { "color": "green", "shower": true }, "appliances": { "washing machine": { "brand": "Any Brand", "color": "beige" }, "dryer": { "brand": "Any Brand", "color": "white" } } } }', 'house', 'appliances', 'washing machine', 'brand'); +------------------------+ | json_extract_path_text | +------------------------+ | Any Brand | +------------------------+

次の例は、サンプルテーブルを作成し、SUPER 値を入力して、両方の行の 'f2' パスの値を返します。

CREATE TABLE json_example(id INT, json_text SUPER); INSERT INTO json_example VALUES (1, JSON_PARSE('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}')), (2, JSON_PARSE('{ "farm": { "barn": { "color": "red", "feed stocked": true } } }')); SELECT * FROM json_example; id | json_text ------------+-------------------------------------------- 1 | {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}} 2 | {"farm":{"barn":{"color":"red","feed stocked":true}}} SELECT id, JSON_EXTRACT_PATH_TEXT(JSON_SERIALIZE(json_text), 'f2') FROM json_example; id | json_text ------------+-------------------------------------------- 1 | {"f3":1} 2 |