- カテゴリ:
半構造化データ関数と構造化データ関数 (配列/オブジェクト)
OBJECT_INSERT¶
新しいキーと値のペア(または新しい値で更新された既存のキー)が挿入された入力 OBJECT 値で構成される OBJECT 値を返します。
構文¶
OBJECT_INSERT( <object> , <key> , <value> [ , <updateFlag> ] )
引数¶
必須:
object新しいキー値のペアが挿入されるか、既存のキー値のペアが更新されるソース OBJECT 値。
keyOBJECT 値に挿入する新しいキー、または値を更新する既存のキー。指定されたキーは、
updateFlagが TRUE に設定されている場合を除き、 OBJECT 値にある既存のすべてのキーと異なっている必要があります。valueキーに関連付けられた値です。
オプション:
updateFlagブールフラグ。TRUE に設定すると、入力値は、新しいキーと値のペアを挿入するのではなく、 OBJECT 値にある既存のキーの値を更新することを指定します。
デフォルトは FALSE です。
戻り値¶
この関数は、 OBJECT データ型を持つ値を返します。
使用上の注意¶
関数は JSON null 値をサポートしますが、 SQL NULL 値またはキーはサポートしません。
keyが NULL 以外の文字列で、valueが JSON null(例:PARSE_JSON('null'))の場合は、キーと値のペアが返された OBJECT 値に挿入されます。keyまたはvalueのいずれかが SQL NULL の場合は、返される OBJECT 値からキーと値のペアが省略されます。
オプションの
updateFlag引数が TRUE に設定されている場合、既存の入力keyは入力valueに更新されます。updateFlagが省略されているか、 FALSE に設定されている場合は、 OBJECT 値にすでに存在する入力キーでこの関数を呼び出すとエラーになります。更新フラグが TRUE に設定されているが、対応するキーが OBJECT 値にまだ存在しない場合は、キーと値のペアが追加されます。
構造化 OBJECT 値 の場合:
キーとなる引数には、定数を指定する必要があります。
updateFlag引数が FALSE の場合(新しいキーと値のペアを挿入する場合):OBJECT 値にすでに存在するキーを指定するとエラーになります。
SELECT OBJECT_INSERT( {'city':'San Mateo','state':'CA'}::OBJECT(city VARCHAR,state VARCHAR), 'city', 'San Jose', false );
093202 (23001): Function OBJECT_INSERT: expected structured object to not contain field city but it did.
この関数は、構造化 OBJECT 値を返します。OBJECT 値の型には、新しく挿入されたキーが含まれます。例えば、
zipcode値の VARCHAR を持つ94402キーを追加するとします。SELECT OBJECT_INSERT( {'city':'San Mateo','state':'CA'}::OBJECT(city VARCHAR,state VARCHAR), 'zip_code', 94402::VARCHAR, false ) AS new_object, SYSTEM$TYPEOF(new_object) AS type;
+------------------------+---------------------------------------------------------------------+ | NEW_OBJECT | TYPE | |------------------------+---------------------------------------------------------------------| | { | OBJECT(city VARCHAR, state VARCHAR, zip_code VARCHAR NOT NULL)[LOB] | | "city": "San Mateo", | | | "state": "CA", | | | "zip_code": "94402" | | | } | | +------------------------+---------------------------------------------------------------------+
挿入される値の型は OBJECT 型の定義に追加される型を決定します。この場合、
zipcodeの値は VARCHAR にキャストされた値であるため、zipcodeの型は VARCHAR になります。
updateFlag引数が TRUE の場合(既存のキーと値のペアを置き換える場合):OBJECT 値に存在しないキーを指定するとエラーになります。
この関数は、同じ型の構造化 OBJECT 値を返します。
挿入された値の型は、既存のキーの型に 強制 されます。
例¶
以下の例では、 OBJECT_INSERT関数を呼びだしています。
キーと値のペアの追加および更新¶
例では、次のテーブルを使用します。
CREATE OR REPLACE TABLE object_insert_examples (object_column OBJECT);
INSERT INTO object_insert_examples (object_column)
SELECT OBJECT_CONSTRUCT('a', 'value1', 'b', 'value2');
SELECT * FROM object_insert_examples;
+------------------+
| OBJECT_COLUMN |
|------------------|
| { |
| "a": "value1", |
| "b": "value2" |
| } |
+------------------+
OBJECT 値に新しいキーと値のペアを追加する¶
2つのキーと値のペアを持つ OBJECT 値に、3つ目のキーと値のペアを挿入します。
UPDATE object_insert_examples
SET object_column = OBJECT_INSERT(object_column, 'c', 'value3');
SELECT * FROM object_insert_examples;
+------------------+
| OBJECT_COLUMN |
|------------------|
| { |
| "a": "value1", |
| "b": "value2", |
| "c": "value3" |
| } |
+------------------+
OBJECT 値に新しいキーと値のペアを2つ挿入し、キーと値のペアを1つ省略します。
dは、 JSON null値で構成されています。
eは、 SQL NULL 値で構成されるため、省略されます。
fは、「null」を含む文字列で構成されます。
UPDATE object_insert_examples
SET object_column = OBJECT_INSERT(object_column, 'd', PARSE_JSON('null'));
UPDATE object_insert_examples
SET object_column = OBJECT_INSERT(object_column, 'e', NULL);
UPDATE object_insert_examples
SET object_column = OBJECT_INSERT(object_column, 'f', 'null');
SELECT * FROM object_insert_examples;
+------------------+
| OBJECT_COLUMN |
|------------------|
| { |
| "a": "value1", |
| "b": "value2", |
| "c": "value3", |
| "d": null, |
| "f": "null" |
| } |
+------------------+
OBJECT値のキーと値のペアの更新¶
OBJECT 値の既存のキーと値のペア("b": "value2")を新しい値("valuex")で更新します。
UPDATE object_insert_examples
SET object_column = OBJECT_INSERT(object_column, 'b', 'valuex', TRUE);
SELECT * FROM object_insert_examples;
+------------------+
| OBJECT_COLUMN |
|------------------|
| { |
| "a": "value1", |
| "b": "valuex", |
| "c": "value3", |
| "d": null, |
| "f": "null" |
| } |
+------------------+
ネストされたOBJECT値の追加および更新¶
例では、ネストされたOBJECT値を持つ以下のテーブルを使用します。
CREATE OR REPLACE TABLE sample_nested_object (
id INTEGER,
nested_object OBJECT);
INSERT INTO sample_nested_object (id, nested_object)
SELECT 1,
OBJECT_CONSTRUCT(
'outer_key1', OBJECT_CONSTRUCT('inner_key1A', 'example1', 'inner_key1B', 'example2'),
'outer_key2', OBJECT_CONSTRUCT('inner_key2', 5)
);
INSERT INTO sample_nested_object (id, nested_object)
SELECT 2,
OBJECT_CONSTRUCT(
'outer_key1', OBJECT_CONSTRUCT('inner_key1A', 'example3', 'inner_key1B', 'example4'),
'outer_key2', OBJECT_CONSTRUCT('inner_key2', 7)
);
SELECT * FROM sample_nested_object;
+----+--------------------------------+
| ID | NESTED_OBJECT |
+----+--------------------------------+
| 1 | { |
| | "outer_key1": { |
| | "inner_key1A": "example1", |
| | "inner_key1B": "example2" |
| | }, |
| | "outer_key2": { |
| | "inner_key2": 5 |
| | } |
| | } |
| 2 | { |
| | "outer_key1": { |
| | "inner_key1A": "example3", |
| | "inner_key1B": "example4" |
| | }, |
| | "outer_key2": { |
| | "inner_key2": 7 |
| | } |
| | } |
+----+--------------------------------+
ネストされたOBJECT値に新しいネストされたキーと値のペアを追加¶
次の例では、テーブルのネストされたOBJECT値に、新しいネストされたキーと値のペアを追加します。:doc:`/sql-reference/functions/case`式を使用して、行ごとに追加するキーと値のペアを指定しています。
UPDATE sample_nested_object
SET nested_object = OBJECT_INSERT(
nested_object,
'outer_key1',
OBJECT_INSERT(
nested_object:outer_key1,
'inner_key1C',
CASE
WHEN id = 1 THEN 'added_value_1'
WHEN id = 2 THEN 'added_value_2'
END,
TRUE
),
TRUE);
SELECT * FROM sample_nested_object;
+----+------------------------------------+
| ID | NESTED_OBJECT |
|----+------------------------------------|
| 1 | { |
| | "outer_key1": { |
| | "inner_key1A": "example1", |
| | "inner_key1B": "example2", |
| | "inner_key1C": "added_value_1" |
| | }, |
| | "outer_key2": { |
| | "inner_key2": 5 |
| | } |
| | } |
| 2 | { |
| | "outer_key1": { |
| | "inner_key1A": "example3", |
| | "inner_key1B": "example4", |
| | "inner_key1C": "added_value_2" |
| | }, |
| | "outer_key2": { |
| | "inner_key2": 7 |
| | } |
| | } |
+----+------------------------------------+
ネストされたOBJECT値のキーと値のペアの更新¶
次の例では、テーブルのOBJECT値内のネストされたキーと値のペアを更新します。
UPDATE sample_nested_object
SET nested_object = OBJECT_INSERT(
nested_object,
'outer_key2',
OBJECT_INSERT(
nested_object:outer_key2,
'inner_key2',
CASE
WHEN id = 1 THEN 6
WHEN id = 2 THEN 8
END,
TRUE),
TRUE);
SELECT * FROM sample_nested_object;
+----+------------------------------------+
| ID | NESTED_OBJECT |
|----+------------------------------------|
| 1 | { |
| | "outer_key1": { |
| | "inner_key1A": "example1", |
| | "inner_key1B": "example2", |
| | "inner_key1C": "added_value_1" |
| | }, |
| | "outer_key2": { |
| | "inner_key2": 6 |
| | } |
| | } |
| 2 | { |
| | "outer_key1": { |
| | "inner_key1A": "example3", |
| | "inner_key1B": "example4", |
| | "inner_key1C": "added_value_2" |
| | }, |
| | "outer_key2": { |
| | "inner_key2": 8 |
| | } |
| | } |
+----+------------------------------------+