カテゴリ:

半構造化データ関数と構造化データ関数 (抽出)

GET

ARRAY または OBJECT (または、 ARRAY か OBJECT を含む VARIANT)から値を抽出します。

引数のいずれかが NULL の場合、関数は NULL を返します。

この関数を GET DML コマンドと混同しないでください。

こちらもご参照ください。

GET_IGNORE_CASEGET_PATH、 :

構文

ARRAY (または ARRAY を含む VARIANT)

GET( <array> , <index> )

GET( <variant> , <index> )
Copy

OBJECT (または OBJECT を含む VARIANT)

GET( <object> , <field_name> )

GET( <variant> , <field_name> )
Copy

MAP

GET( <map> , <key> )
Copy

引数

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))
    ;
Copy
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                        |
|         |                      | }                                               |
+---------+----------------------+-------------------------------------------------+
Copy

ARRAY の最初の要素を抽出します。

SELECT GET(a, 0) FROM vartab;
+-----------+
| GET(A, 0) |
|-----------|
| 2.71      |
+-----------+
Copy

国の名前を指定して、国名と首都を含む OBJECT からその国の首都の名前を抽出します。

SELECT GET(o, 'Ukraine') FROM vartab;
+-------------------+
| GET(O, 'UKRAINE') |
|-------------------|
| "Kyiv"            |
+-------------------+
Copy

OBJECT を含む VARIANT から気温を抽出します。

SELECT GET(v, 'temperature') FROM vartab;
+-----------------------+
| GET(V, 'TEMPERATURE') |
|-----------------------|
| 31.5                  |
+-----------------------+
Copy

より詳細な例については、 半構造化データのクエリ をご参照ください。

XMLGET で GET を使用する例については、 XMLGET の例と使用上の注意のセクションをご参照ください。