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> )
Copy

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 et map2 ont toutes les deux une valeur avec la même clé, la carte de sortie contient la valeur de map2.

  • 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;
Copy
+-----------------------------+
| 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';
Copy

Interrogez la table pour afficher les données :

SELECT * FROM demo_maps;
Copy
+----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------+
| 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;
Copy
+----+----------------------+
| 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.