- Catégories :
Fonctions de données semi-structurées et structurées (Carte)
MAP_CAT¶
Renvoie la concaténation de deux valeurs MAP.
Syntaxe¶
MAP_CAT( <map1> , <map2> )
Arguments¶
map1
La MAP source.
map2
La MAP à ajouter à
map1
.
Renvoie¶
Le type de retour de cette fonction est le type de map1
. map2
est contraint de se transformer en type map1
conformément aux règles de conversion contrainte. Pour des informations sur les règles de conversion contrainte, voir Conversion implicite d’une valeur (coercition).
Notes sur l’utilisation¶
Si
map1
etmap2
ont toutes les deux une valeur avec la même clé, la carte de sortie contient la valeur demap2
.Si l’un des deux arguments est NULL, la fonction renvoie NULL sans signaler d’erreur.
Exemples¶
Créer deux MAPs et les concaténer :
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" |
| } |
+-----------------------------+
Création d’une table temporaire qui contient des valeurs MAP :
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';
Interrogez la table pour afficher les données :
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" | ] | | | | | |
| | | } | | | | | | |
+----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------+
Concaténer les deux colonnes MAP attrs
et 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" |
| | } |
+----+----------------------+
La sortie contient les clés et les valeurs des deux mappages. La sortie montre également que lorsque map1
de la colonne attr
et map2
de la colonne defaults
ont toutes les deux une valeur avec la même clé, la carte de sortie contient la valeur de map2
. Autrement dit, la taille L
figure dans la sortie pour la ligne 1
au lieu de la taille M
.