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,DOUBLEouSTRING.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 |
|
|
Retorna o valor correspondente a uma chave específica. |
|
V |
|
|
Retorna a quantidade total de chaves e valores. |
|
INT |
|
|
Retorna todas as chaves como um array. |
|
ARRAY |
|
|
Retorna todos os valores como um array. |
|
ARRAY |