- カテゴリ:
半構造化データ関数と構造化データ関数 (抽出)
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> )
引数¶
array
ARRAY に評価される式。
index
INTEGER に評価される式。これは、 ARRAY から取得する要素の位置を指定します。位置は1ベースではなく、0ベースです。
インデックスが配列の境界の外側を指す場合、またはインデックス付き要素が存在しない場合(疎配列内):
array
が半構造化 ARRAY の場合、この関数は NULL を返します。array
が構造化 ARRAY の場合、エラーが発生します。
variant
ARRAY または OBJECT のいずれかを含む VARIANT に評価される式。
object
キーと値のペアを含む OBJECT に評価される式。
field_name
VARCHAR に評価される式。これは、値を取得するキーと値のペアにあるキーを指定します。
field_name
は空の文字列にはできません。object
が 構造化 OBJECT の場合、field_name
に定数を指定する必要があります。object
に指定されたキーが含まれていない場合:object
が半構造化 OBJECT の場合、関数は NULL を返します。object
が構造化 OBJECT の場合、エラーが発生します。
map
MAP に評価される式。
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 の例と使用上の注意のセクションをご参照ください。