Todos os produtos
Search
Central de documentação

AnalyticDB:Map

Última atualização: Jun 27, 2026

O tipo MAP armazena pares chave-valor e tem suporte no AnalyticDB for MySQL 3.1.1 ou superior.

Definição

Uma coluna MAP associa chaves a valores:

  • As chaves devem ser de um tipo de dados primitivo: TINYINT, BOOLEAN, SMALLINT, INT, BIGINT, FLOAT, DOUBLE ou STRING.

  • Os valores podem ser de um tipo de dados primitivo ou dos tipos MAP e ARRAY, o que permite estruturas aninhadas.

Por exemplo, defina map<int, string> para um mapa simples ou map<int, map<int, string>> para um mapa aninhado.

Observações de uso

  • Colunas MAP ou ARRAY não aceitam índices. Use condições de filtro nas instruções SQL para reduzir o volume de dados verificados.

  • As chaves devem ser únicas em cada mapa.

  • A ordem de inserção das chaves não é preservada. Por exemplo, inserir {"a":1,"b":2,"d":3} pode retornar {"d":3,"a":1,"b":2}.

Exemplos

Crie uma tabela

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

Inserir dados

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

Selecione dados

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

Use element_at para recuperar um valor pela chave. O argumento é uma chave, não um subscrito.

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)

Use map_keys e map_values para extrair todas as chaves ou valores como um array. A função size retorna a contagem total combinada de chaves e valores.

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)

Funções compatíveis

Função

Descrição

Exemplo

Tipo de retorno

element_at

Retorna o valor correspondente a uma chave específica.

element_at(map(array["a","b"], array[1,2]), a)1

V

size

Retorna a quantidade total de chaves e valores.

size(map(array["a","b"], array[1,2]))4

INT

map_keys

Retorna todas as chaves como um array.

map_keys(map(array["a","b"], array[1,2]))["a","b"]

ARRAY

map_values

Retorna todos os valores como um array.

map_values(map(array["a","b"], array[1,2]))[1,2]

ARRAY