- 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¶
map1
Der MAP-Quelltyp.
map2
Der MAP-Typ, der an
map1
angehä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
map1
als auchmap2
einen 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.