- カテゴリ:
半構造化データ関数と構造化データ関数 (配列/オブジェクト)
OBJECT_DELETE¶
1つ以上のキーが削除された入力(つまり、ソース)オブジェクトのコンテンツを含むオブジェクトを返します。
構文¶
OBJECT_DELETE( <object>, <key1> [, <key2>, ... ] )
引数¶
object
ソースオブジェクトです。
key1
、key2
返されるオブジェクトから省略されるキーです。
戻り値¶
この関数は OBJECT型の値を返します。
使用上の注意¶
構造化 OBJECTs の場合:
キーとなる引数には、定数を指定する必要があります。
指定されたキーが OBJECT 型定義の一部でない場合、呼び出しは失敗します。たとえば、 OBJECT 値には指定されたキー
zip_code
が含まれていないため、以下の呼び出しは失敗します。SELECT OBJECT_DELETE( {'city':'San Mateo','state':'CA'}::OBJECT(city VARCHAR,state VARCHAR), 'zip_code' );
093201 (23001): Function OBJECT_DELETE: expected structured object to contain field zip_code but it did not.
この関数は、構造化 OBJECT 値を返します。OBJECT 値の型は、削除されたキーを除きます。例えば、
city
キーを削除するとします。SELECT OBJECT_DELETE( {'city':'San Mateo','state':'CA'}::OBJECT(city VARCHAR,state VARCHAR), 'city' ) AS new_object, SYSTEM$TYPEOF(new_object);
この関数は、
city
キーを含まないOBJECT(state VARCHAR)
型の OBJECT 値を返します。+-----------------+--------------------------------------+ | NEW_OBJECT | SYSTEM$TYPEOF(NEW_OBJECT) | |-----------------+--------------------------------------| | { | OBJECT(state VARCHAR(16777216))[LOB] | | "state": "CA" | | | } | | +-----------------+--------------------------------------+
関数が OBJECT 値からすべてのキーを削除した場合、関数は
OBJECT()
型の空の構造化 OBJECT 値を返します。SELECT OBJECT_DELETE( {'state':'CA'}::OBJECT(state VARCHAR), 'state' ) AS new_object, SYSTEM$TYPEOF(new_object);
+------------+---------------------------+ | NEW_OBJECT | SYSTEM$TYPEOF(NEW_OBJECT) | |------------+---------------------------| | {} | OBJECT()[LOB] | +------------+---------------------------+
構造化 OBJECT 値の型にキーと値のペアが含まれる場合、それらのペアの名前と型は型の括弧内に含まれます(例: OBJECT(city VARCHAR))。空の構造化 OBJECT 値にはキーと値のペアが含まれないため、括弧は空です。
例¶
このクエリは、ソースオブジェクトからキー a
と b
を除いたオブジェクトを返します。
SELECT OBJECT_DELETE(OBJECT_CONSTRUCT('a', 1, 'b', 2, 'c', 3), 'a', 'b') AS object_returned;
+-----------------+
| OBJECT_RETURNED |
|-----------------|
| { |
| "c": 3 |
| } |
+-----------------+
テーブルを作成し、 OBJECT 値の行を挿入します。この例では、 INSERT ステートメントに OBJECT 定数 を使用します。
CREATE OR REPLACE TABLE object_delete_example (
id INTEGER,
ov OBJECT);
INSERT INTO object_delete_example (id, ov)
SELECT
1,
{
'employee_id': 1001,
'employee_date_of_birth': '12-10-2003',
'employee_contact':
{
'city': 'San Mateo',
'state': 'CA',
'phone': '800-555‑0100'
}
};
INSERT INTO object_delete_example (id, ov)
SELECT
2,
{
'employee_id': 1002,
'employee_date_of_birth': '01-01-1990',
'employee_contact':
{
'city': 'Seattle',
'state': 'WA',
'phone': '800-555‑0101'
}
};
テーブルをクエリしてデータを確認します。
SELECT * FROM object_delete_example;
+----+-------------------------------------------+
| ID | OV |
|----+-------------------------------------------|
| 1 | { |
| | "employee_contact": { |
| | "city": "San Mateo", |
| | "phone": "800-555‑0100", |
| | "state": "CA" |
| | }, |
| | "employee_date_of_birth": "12-10-2003", |
| | "employee_id": 1001 |
| | } |
| 2 | { |
| | "employee_contact": { |
| | "city": "Seattle", |
| | "phone": "800-555‑0101", |
| | "state": "WA" |
| | }, |
| | "employee_date_of_birth": "01-01-1990", |
| | "employee_id": 1002 |
| | } |
+----+-------------------------------------------+
クエリ出力から employee_date_of_birth
キーを削除するには、以下のクエリを実行します。
SELECT id,
OBJECT_DELETE(ov, 'employee_date_of_birth') AS contact_without_date_of_birth
FROM object_delete_example;
+----+-------------------------------+
| ID | CONTACT_WITHOUT_DATE_OF_BIRTH |
|----+-------------------------------|
| 1 | { |
| | "employee_contact": { |
| | "city": "San Mateo", |
| | "phone": "800-555‑0100", |
| | "state": "CA" |
| | }, |
| | "employee_id": 1001 |
| | } |
| 2 | { |
| | "employee_contact": { |
| | "city": "Seattle", |
| | "phone": "800-555‑0101", |
| | "state": "WA" |
| | }, |
| | "employee_id": 1002 |
| | } |
+----+-------------------------------+
employee_contact
のネストされたオブジェクトにクエリを実行し、そこから phone
キーを削除するには、以下のクエリを実行します。
SELECT id,
OBJECT_DELETE(ov:"employee_contact", 'phone') AS contact_without_phone
FROM object_delete_example;
+----+------------------------+
| ID | CONTACT_WITHOUT_PHONE |
|----+------------------------|
| 1 | { |
| | "city": "San Mateo", |
| | "state": "CA" |
| | } |
| 2 | { |
| | "city": "Seattle", |
| | "state": "WA" |
| | } |
+----+------------------------+