- カテゴリ:
半構造化データ関数と構造化データ関数 (抽出)
GET¶
ARRAY または OBJECT (または、 ARRAY か OBJECT を含む VARIANT)から値を抽出します。
引数のいずれかが NULL の場合、関数は NULL を返します。
この関数を GET DML コマンドと混同しないでください。
- こちらもご参照ください。
構文¶
ARRAY (または ARRAY を含む VARIANT)
GET( <array> , <index> )
GET( <variant> , <index> )
OBJECT (または OBJECT を含む VARIANT)
GET( <object> , <field_name> )
GET( <variant> , <field_name> )
MAP
GET( <map> , <key> )
引数¶
arrayARRAY に評価される式。
indexINTEGER に評価される式。これは、 ARRAY から取得する要素の位置を指定します。位置は1ベースではなく、0ベースです。
インデックスが配列の境界の外側を指す場合、またはインデックス付き要素が存在しない場合(疎配列内):
arrayが半構造化 ARRAY の場合、この関数は NULL を返します。arrayが構造化 ARRAY の場合、エラーが発生します。
variantARRAY または OBJECT のいずれかを含む VARIANT に評価される式。
objectキーと値のペアを含む OBJECT に評価される式。
field_nameVARCHAR に評価される式。これは、値を取得するキーと値のペアにあるキーを指定します。
field_nameは空の文字列にはできません。objectが 構造化 OBJECT の場合、field_nameに定数を指定する必要があります。objectに指定されたキーが含まれていない場合:objectが半構造化 OBJECT の場合、関数は NULL を返します。objectが構造化 OBJECT の場合、エラーが発生します。
mapMAP に評価される式。
key値を取得するキーと値のペアにあるキー。
mapに指定されたキーが含まれていない場合、関数は NULL を返します。
戻り値¶
戻り値は、 ARRAY の指定された要素、または OBJECT にあるキーと値のペアの指定されたキーに対応する値です。
入力オブジェクトが半構造化 OBJECT、 ARRAY、 VARIANT 値の場合、関数は VARIANT 値を返します。次の理由のため、値のデータ型は VARIANT です。
ARRAY の値では、各要素のタイプは VARIANT です。
OBJECT の値では、各キーと値のペアの値は VARIANT のタイプです。
入力オブジェクトが 構造化 OBJECT、構造化 ARRAY、または MAP の場合、関数はオブジェクトに指定された型の値を返します。
例えば、入力オブジェクトのタイプが ARRAY(NUMBER) の場合、関数は NUMBER の値を返します。
使用上の注意¶
GET は、
field_nameに大文字と小文字を区別するマッチングを適用します。大文字と小文字を区別しないマッチングでは、 GET_IGNORE_CASE を使用します。最初のパラメーターの型が VARIANT の場合、
2番目のパラメーターの型が VARCHAR のときに(例:
field_name)、variantに OBJECT が含まれていなければ、関数は NULL を返します。2番目のパラメーターの型が INTEGER のときに(例:
index)、variantに ARRAY が含まれていなければ、関数は NULL を返します。
例¶
サンプルデータを使用してテーブルを作成します。
CREATE TABLE vartab (a ARRAY, o OBJECT, v VARIANT); INSERT INTO vartab (a, o, v) SELECT ARRAY_CONSTRUCT(2.71, 3.14), OBJECT_CONSTRUCT('Ukraine', 'Kyiv'::VARIANT, 'France', 'Paris'::VARIANT), TO_VARIANT(OBJECT_CONSTRUCT('weatherStationID', 42::VARIANT, 'timestamp', '2022-03-07 14:00'::TIMESTAMP_LTZ::VARIANT, 'temperature', 31.5::VARIANT, 'sensorType', 'indoor'::VARIANT)) ;SELECT a, o, v FROM vartab; +---------+----------------------+-------------------------------------------------+ | A | O | V | |---------+----------------------+-------------------------------------------------| | [ | { | { | | 2.71, | "France": "Paris", | "sensorType": "indoor", | | 3.14 | "Ukraine": "Kyiv" | "temperature": 31.5, | | ] | } | "timestamp": "2022-03-07 14:00:00.000 -0800", | | | | "weatherStationID": 42 | | | | } | +---------+----------------------+-------------------------------------------------+
ARRAY の最初の要素を抽出します。
SELECT GET(a, 0) FROM vartab; +-----------+ | GET(A, 0) | |-----------| | 2.71 | +-----------+
国の名前を指定して、国名と首都を含む OBJECT からその国の首都の名前を抽出します。
SELECT GET(o, 'Ukraine') FROM vartab; +-------------------+ | GET(O, 'UKRAINE') | |-------------------| | "Kyiv" | +-------------------+
OBJECT を含む VARIANT から気温を抽出します。
SELECT GET(v, 'temperature') FROM vartab; +-----------------------+ | GET(V, 'TEMPERATURE') | |-----------------------| | 31.5 | +-----------------------+
より詳細な例については、 半構造化データのクエリ をご参照ください。
XMLGET で GET を使用する例については、 XMLGET の例と使用上の注意のセクションをご参照ください。