O AnalyticDB for MySQL 3.1.1 e versões posteriores oferecem suporte aos tipos de dados ARRAY e MAP. Esta página descreve o tipo ARRAY: definição, limitações, exemplos de uso e funções compatíveis.
Definição
Um ARRAY armazena uma coleção de elementos do mesmo tipo de dados e permite duplicatas, semelhante a uma lista em Java. Todos os elementos de um array devem ter o mesmo tipo. Por exemplo, ao definir array<int> para uma coluna, cada elemento nessa coluna será do tipo INT.
Arrays aninhados são suportados. Exemplo: array<array<string>>.
Limitações
Não é possível criar índices em colunas ARRAY ou MAP.
Para filtrar dados de array com eficiência, combine condições de busca nas consultas SQL em vez de varrer arrays inteiros. Minimizar os dados verificados melhora o desempenho da consulta.
Trabalhar com arrays
Crie uma tabela
A instrução a seguir cria uma tabela com duas colunas de array: b do tipo array<int> e c do tipo array<array<string>>.
Create Table `array_test` (
`a` int,
`b` array<int>,
`c` array<array<string>>,
primary key (`a`)
) DISTRIBUTED BY HASH(`a`)
Inserir dados
Insira valores de array como strings JSON. A instrução abaixo insere uma linha em que b é [1,2,3] e c é [["a"],["b","c"]].
insert into array_test values (1, '[1,2,3]', '[["a"],["b","c"]]');
Consultar dados
Consulte a tabela para recuperar todas as linhas:
mysql> select * from array_test;
+------+---------+-------------------+
| a | b | c |
+------+---------+-------------------+
| 1 | [1,2,3] | [["a"],["b","c"]] |
+------+---------+-------------------+
1 row in set (0.08 sec)
As colunas ARRAY e MAP são retornadas no formato JSON. Por exemplo, c[2], subcoluna aninhada do tipo array<string>, é retornada como um array JSON.
Acessar elementos do array
Use a notação de colchetes ou a função element_at para recuperar elementos por índice.
Os índices de array começam em 1, não em 0. b[1] e element_at(b, 1) são equivalentes.
A tabela a seguir mostra ambas as sintaxes de acesso e seus resultados:
|
Expressão |
Resultado |
|
|
|
|
|
|
|
|
|
|
|
|
Exemplo completo de consulta:
mysql> select a,b[1],element_at(b,1),c[2],element_at(c,2) from array_test;
+------+------+-----------------+-----------+-----------------+
| a | b[1] | element_at(b,1) | c[2] | element_at(c,2) |
+------+------+-----------------+-----------+-----------------+
| 1 | 1 | 1 | ["b","c"] | ["b","c"] |
+------+------+-----------------+-----------+-----------------+
1 row in set (0.11 sec)
Funções compatíveis
|
Função |
Descrição |
Tipo de retorno |
|
|
Retorna o elemento no índice especificado (base 1). Exemplo: |
T |
|
|
Retorna a quantidade de elementos em um array. |
int |
|
|
Verifica se um array contém o valor especificado. Exemplo: |
BOOL |
|
|
Retorna o maior elemento de um array. |
T |
|
|
Retorna o menor elemento de um array. |
T |
|
|
Retorna a posição da primeira ocorrência de um elemento. Exemplo: |
int |
|
|
Remove todos os elementos iguais ao valor especificado. Exemplo: |
array |
|
|
Ordena um array. Exemplo: |
array |
|
|
Inverte a ordem dos elementos. Exemplo: |
array |
|
|
Retorna o array com elementos em ordem aleatória. Exemplo: |
array |
|
|
Retorna um subarray. |
array |
|
|
Mescla dois ou mais arrays, mantendo duplicatas. Exemplo: |
array |
|
|
Remove elementos duplicados de um array. Exemplo: |
array |
|
|
Mescla dois ou mais arrays e remove duplicatas. Exemplo: |
array |
|
|
Retorna elementos presentes em todos os arrays de entrada. Exemplo: |
array |
|
|
Concatena elementos do array em uma string usando o delimitador especificado. Exemplo: |
string |
|
|
Achata um array aninhado em um array de nível único. Exemplo: |
array |