Tous les produits
Search
Centre de documentation

AnalyticDB:Map

Dernière mise à jour :Aug 10, 2026

Le type MAP stocke des paires clé-valeur. Il est pris en charge par AnalyticDB for MySQL 3.1.1 et versions ultérieures.

Définition

Une colonne MAP associe des clés à des valeurs :

  • Les clés doivent être d'un type de données primitif : TINYINT, BOOLEAN, SMALLINT, INT, BIGINT, FLOAT, DOUBLE ou STRING.

  • Les valeurs peuvent être d'un type de données primitif, ou de type MAP ou ARRAY, ce qui permet de créer des structures imbriquées.

Par exemple, définissez map<int, string> pour une map simple, ou map<int, map<int, string>> pour une map imbriquée.

Notes d'utilisation

  • Les index ne sont pas pris en charge sur les colonnes MAP ou ARRAY. Utilisez des conditions de filtrage dans les instructions SQL pour réduire la quantité de données analysées.

  • Les clés doivent être uniques au sein d'une map.

  • L'ordre d'insertion des clés n'est pas conservé. Par exemple, l'insertion de {"a":1,"b":2,"d":3} peut renvoyer {"d":3,"a":1,"b":2}.

Exemples

Créer une table

CREATE TABLE map_test (
  `a` INT,
  `b` MAP<INT, STRING>,
  `c` MAP<INT, MAP<INT, STRING>>,
  PRIMARY KEY (`a`)
) DISTRIBUTED BY HASH(`a`);

Insérer des données

INSERT INTO map_test VALUES (1, '{1:"a"}', '{1:{11:"a"},2:{22:"b"}}');

Interroger des données

SELECT * FROM map_test;
+------+---------+-------------------------+
| a    | b       | c                       |
+------+---------+-------------------------+
|    1 | {1:"a"} | {1:{11:"a"},2:{22:"b"}} |
+------+---------+-------------------------+
1 row in set (0.07 sec)

Utilisez element_at pour récupérer une valeur par clé. L'argument est une clé, et non un indice.

SELECT element_at(c, 1), element_at(element_at(c, 1), 11) FROM map_test;
+-----------------+--------------------------------+
| element_at(c,1) | element_at(element_at(c,1),11) |
+-----------------+--------------------------------+
| {11:"a"}        | a                              |
+-----------------+--------------------------------+
1 row in set (0.07 sec)

Utilisez map_keys et map_values pour extraire toutes les clés ou toutes les valeurs sous forme de tableau. La fonction size renvoie le nombre total combiné de clés et de valeurs.

SELECT map_keys(b), map_values(b), size(b), size(map_keys(b)), size(map_values(b)) FROM map_test;
+-------------+---------------+---------+-------------------+---------------------+
| map_keys(b) | map_values(b) | size(b) | size(map_keys(b)) | size(map_values(b)) |
+-------------+---------------+---------+-------------------+---------------------+
| [1]         | ["a"]         |       2 |                 1 |                   1 |
+-------------+---------------+---------+-------------------+---------------------+
1 row in set (0.08 sec)
SELECT map_keys(c), map_values(c), size(c), size(map_keys(c)), size(map_values(c)) FROM map_test;
+-------------+---------------------+---------+-------------------+---------------------+
| map_keys(c) | map_values(c)       | size(c) | size(map_keys(c)) | size(map_values(c)) |
+-------------+---------------------+---------+-------------------+---------------------+
| [1,2]       | [{11:"a"},{22:"b"}] |       4 |                 2 |                   2 |
+-------------+---------------------+---------+-------------------+---------------------+
1 row in set (0.08 sec)

Fonctions prises en charge

Fonction Description Exemple Type de retour
element_at Renvoie la valeur correspondant à une clé donnée. element_at(map(array["a","b"], array[1,2]), a) → 1 V
size Renvoie le nombre total de clés et de valeurs. size(map(array["a","b"], array[1,2])) → 4 INT
map_keys Renvoie toutes les clés sous forme de tableau. map_keys(map(array["a","b"], array[1,2])) → ["a","b"] ARRAY
map_values Renvoie toutes les valeurs sous forme de tableau. map_values(map(array["a","b"], array[1,2])) → [1,2] ARRAY