- Kategorien:
Funktionen für semistrukturierte und strukturierte Daten (Zuordnung/Map)
MAP_INSERT¶
Gibt ein neues MAP-Objekt zurück, das aus dem Eingabe-MAP-Objekt besteht, in das ein neues Schlüssel-Wert-Paar eingefügt wurde (d. h., ein bestehender Schlüssel wird mit einem neuen Wert aktualisiert).
Syntax¶
MAP_INSERT( <map> , <key> , <value> [ , <updateFlag> ] )
Argumente¶
map
Das Zuordnungs-Quellobjekt, in das das neue Schlüssel-Wert-Paar eingefügt wird.
key
Der neue Schlüssel, der in die Zuordnung eingefügt werden soll. Muss sich von allen in der Zuordnung vorhandenen Schlüsseln unterscheiden, es sei denn,
updateFlag
ist auf TRUE gesetzt.value
Der dem Schlüssel zugeordnete Wert.
Optional
updateFlag
Ein Boolesches Flag, das bei der Einstellung TRUE angibt, dass der Eingabewert zum Aktualisieren eines vorhandenen Werts für einen Schlüssel im Zuordnungsobjekt verwendet werden soll, anstatt ein neues Schlüssel-Wert-Paar einzufügen.
Der Standardwert ist FALSE.
Rückgabewerte¶
Gibt ein MAP-Objekt zurück, das aus dem Eingabe-MAP-Objekt, in das ein neues Schlüssel-Wert-Paar eingefügt wurde oder ein bestehender Schlüssel wurde mit einem neuen Wert aktualisiert.
Nutzungshinweise¶
Der Typ des Schlüsselausdrucks muss mit dem Typ des Schlüssels der Zuordnung übereinstimmen. Wenn der Typ VARCHAR ist, können die Typen unterschiedlich lang sein.
Die Funktion unterstützt JSON Null-Werte, aber keine SQL NULL-Werte oder Schlüssel:
Wenn
key
eine beliebige andere Zeichenfolge als NULL ist undvalue
eine JSON-Null ist (zum BeispielPARSE_JSON('NULL')
), dann wird das Schlüssel-Wert-Paar in das zurückgegebene Zuordnungsobjekt eingefügt.Wenn der Schlüssel
key
eine beliebige andere Zeichenfolge als NULL ist undvalue
ein SQL-NULL-Wert ist (z. B.NULL
), dann wird der Wert in einJSON-Null konvertiert und das Schlüssel-Wert-Paar in das zurückgegebene Zuordnungsobjekt eingefügt.Wenn
key
ein SQL-NULL-Wert ist, wird das Schlüssel-Wert-Paar aus dem zurückgegebenen Zuordnungsobjekt weggelassen.
Wenn
updateFlag
auf TRUE gesetzt wird, dann wird das bestehende Eingabe-key
-Objekt auf den Eingabewertvalue
aktualisiert. WennupdateFlag
weggelassen oder auf FALSE gesetzt wird und der Eingabeschlüssel bereits in dem Zuordnungsobjekt existiert, wird ein Fehler zurückgegeben.Wenn
updateFlag
auf TRUE gesetzt wird, der entsprechende Schlüssel aber noch nicht im Zuordnungsobjekt vorhanden ist, wird das Schlüssel-Wert-Paar hinzugefügt.
Beispiele¶
Einfügen eines dritten Schlüssel-Wert-Paars in ein Zuordnungsobjekt, das zwei Schlüssel-Wert-Paare enthält:
SELECT MAP_INSERT({'a':1,'b':2}::MAP(VARCHAR,NUMBER),'c',3);
+------------------------------------------------------+
| MAP_INSERT({'A':1,'B':2}::MAP(VARCHAR,NUMBER),'C',3) |
|------------------------------------------------------|
| { |
| "a": 1, |
| "b": 2, |
| "c": 3 |
| } |
+------------------------------------------------------+
Einfügen von zwei neuen Schlüssel-Wert-Paaren in ein leeres Zuordnungsobjekt, wobei ein Schlüssel-Wert-Paar weglassen wird:
Key_One
besteht aus einem JSON-Nullwert.Key_Two
besteht aus einem SQL-NULL-Wert, der in einen JSON-Nullwert konvertiert wird.Key_Three
besteht aus einer Zeichenfolge, die „null“ enthält.
SELECT MAP_INSERT(MAP_INSERT(MAP_INSERT({}::MAP(VARCHAR,VARCHAR),
'Key_One', PARSE_JSON('NULL')), 'Key_Two', NULL), 'Key_Three', 'null');
+---------------------------------------------------------------------------+
| MAP_INSERT(MAP_INSERT(MAP_INSERT({}::MAP(VARCHAR,VARCHAR), |
| 'KEY_ONE', PARSE_JSON('NULL')), 'KEY_TWO', NULL), 'KEY_THREE', 'NULL') |
|---------------------------------------------------------------------------|
| { |
| "Key_One": null, |
| "Key_Three": "null", |
| "Key_Two": null |
| } |
+---------------------------------------------------------------------------+
Aktualisieren eines vorhandenen Schlüssel-Wert-Paares ("k1": 100
) mit einem neuen Wert ("string-value"
):
SELECT MAP_INSERT({'k1':100}::MAP(VARCHAR,VARCHAR), 'k1', 'string-value', TRUE) AS map;
+------------------------+
| MAP |
|------------------------|
| { |
| "k1": "string-value" |
| } |
+------------------------+
Erstellen Sie eine temporäre Tabelle, die MAP-Werte enthält:
CREATE OR REPLACE TEMP TABLE demo_maps(
id INTEGER,
attrs MAP(VARCHAR, VARCHAR),
defaults MAP(VARCHAR, VARCHAR),
keep_keys ARRAY(VARCHAR),
ins_key VARCHAR,
ins_val VARCHAR,
update_existing BOOLEAN,
del_key1 VARCHAR,
del_key2 VARCHAR);
INSERT INTO demo_maps SELECT
1,
{'color':'red','size':'M','brand':'Acme'}::MAP(VARCHAR, VARCHAR),
{'currency':'USD','size':'L'}::MAP(VARCHAR, VARCHAR),
['color','brand']::ARRAY(VARCHAR),
'material',
'cotton',
TRUE,
'size',
'brand';
INSERT INTO demo_maps SELECT
2,
{'color':'blue','brand':'ZenCo'}::MAP(VARCHAR, VARCHAR),
{'currency':'EUR','size':'M','brand':'ZenCo'}::MAP(VARCHAR, VARCHAR),
['brand','currency']::ARRAY(VARCHAR),
'brand',
'ZC',
FALSE,
'currency',
'material';
Fragen Sie die Tabelle ab, um die Daten anzuzeigen:
SELECT * FROM demo_maps;
+----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------+
| ID | ATTRS | DEFAULTS | KEEP_KEYS | INS_KEY | INS_VAL | UPDATE_EXISTING | DEL_KEY1 | DEL_KEY2 |
|----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------|
| 1 | { | { | [ | material | cotton | True | size | brand |
| | "brand": "Acme", | "currency": "USD", | "color", | | | | | |
| | "color": "red", | "size": "L" | "brand" | | | | | |
| | "size": "M" | } | ] | | | | | |
| | } | | | | | | | |
| 2 | { | { | [ | brand | ZC | False | currency | material |
| | "brand": "ZenCo", | "brand": "ZenCo", | "brand", | | | | | |
| | "color": "blue" | "currency": "EUR", | "currency" | | | | | |
| | } | "size": "M" | ] | | | | | |
| | | } | | | | | | |
+----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------+
Verwenden Sie die Schlüssel in der ins_key
-Spalte und den Werte in der ins_val
-Spalte, um Schlüssel-Wert-Paare in den Zuordnungen in die attrs
Spalte einzufügen oder darin zu aktualisieren:
SELECT id, MAP_INSERT(attrs, ins_key, ins_val, TRUE) AS attrs_insert_or_update
FROM demo_maps;
+----+-------------------------+
| ID | ATTRS_INSERT_OR_UPDATE |
|----+-------------------------|
| 1 | { |
| | "brand": "Acme", |
| | "color": "red", |
| | "material": "cotton", |
| | "size": "M" |
| | } |
| 2 | { |
| | "brand": "ZC", |
| | "color": "blue" |
| | } |
+----+-------------------------+