- Kategorien:
Funktionen für semistrukturierte und strukturierte Daten (Zuordnung/Map)
MAP_CAT¶
Gibt die Verkettung von zwei MAP-Werten zurück.
Syntax¶
MAP_CAT( <map1> , <map2> )
Argumente¶
map1Der MAP-Quelltyp.
map2Der MAP-Typ, der an
map1angehängt werden soll.
Rückgabewerte¶
Der Rückgabetyp dieser Funktion ist der Typ von map1. map2 wird gemäß den Koersionsregeln in den map1-Typ umgewandelt. Weitere Informationen zu Koersionsregeln finden Sie unter Implizites Umwandeln eines Wertes (Koersion).
Nutzungshinweise¶
Wenn sowohl
map1als auchmap2einen Wert mit demselben Schlüssel haben, enthält die Ausgabezuordnung den Wert ausmap2.Wenn eines der beiden Argumente NULL ist, gibt die Funktion NULL zurück, ohne einen Fehler zu melden.
Beispiele¶
Erstellen und Verketten von zwei MAPs:
SELECT MAP_CAT(
{'map1key1':'map1value1','map1key2':'map1value2'}::MAP(VARCHAR,VARCHAR),
{'map2key1':'map2value1','map2key2':'map2value2'}::MAP(VARCHAR,VARCHAR))
AS concatenated_maps;
+-----------------------------+
| CONCATENATED_MAPS |
|-----------------------------|
| { |
| "map1key1": "map1value1", |
| "map1key2": "map1value2", |
| "map2key1": "map2value1", |
| "map2key2": "map2value2" |
| } |
+-----------------------------+
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" | ] | | | | | |
| | | } | | | | | | |
+----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------+
Verketten Sie die beiden MAP-Spalten attrs und defaults:
SELECT id, MAP_CAT(attrs, defaults) AS merged
FROM demo_maps;
+----+----------------------+
| ID | MERGED |
|----+----------------------|
| 1 | { |
| | "brand": "Acme", |
| | "color": "red", |
| | "currency": "USD", |
| | "size": "L" |
| | } |
| 2 | { |
| | "brand": "ZenCo", |
| | "color": "blue", |
| | "currency": "EUR", |
| | "size": "M" |
| | } |
+----+----------------------+
Die Ausgabe enthält die Schlüssel und Werte aus beiden Zuordnungen. Die Ausgabe zeigt auch: Wenn map1 in der attr-Spalte und map2 in der defaults-Spalte einen Wert mit demselben Schlüssel haben, dann enthält die Ausgabezuordnung den Wert aus map2. Das heißt, dass Größe L anstelle von Größe M in der Ausgabe für Zeile 1 enthalten ist.