Pular para o conteúdo principal
Um array de itens do tipo T, cujo índice inicial é 1. T pode ser qualquer tipo de dado, incluindo um array.

Criando um array

Você pode usar uma função para criar um array:
array(T)
Você também pode usar [].
[]
Exemplo de criação de um array:
SELECT array(1, 2) AS x, toTypeName(x)
┌─x─────┬─toTypeName(array(1, 2))─┐
│ [1,2] │ Array(UInt8)            │
└───────┴─────────────────────────┘
SELECT [1, 2] AS x, toTypeName(x)
┌─x─────┬─toTypeName([1, 2])─┐
│ [1,2] │ Array(UInt8)       │
└───────┴────────────────────┘

Trabalhando com Tipos de Dados

Ao criar um array dinamicamente, o ClickHouse define automaticamente o tipo do argumento como o tipo de dado mais específico capaz de armazenar todos os argumentos listados. Se houver valores Nullable ou literais NULL, o tipo de um elemento do array também se torna Nullable. Se o ClickHouse não conseguir determinar o tipo de dado, ele gera uma exceção. Por exemplo, isso acontece ao tentar criar um array com strings e números ao mesmo tempo (SELECT array(1, 'a')). Exemplos de detecção automática de tipo de dado:
SELECT array(1, 2, NULL) AS x, toTypeName(x)
┌─x──────────┬─toTypeName(array(1, 2, NULL))─┐
│ [1,2,NULL] │ Array(Nullable(UInt8))        │
└────────────┴───────────────────────────────┘
Se você tentar criar um array com tipos de dados incompatíveis, ClickHouse lançará uma exceção:
SELECT array(1, 'a')
Received exception from server (version 1.1.54388):
Code: 386. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: There is no supertype for types UInt8, String because some of them are String/FixedString and some of them are not.

Tamanho do Array

É possível determinar o tamanho de um array usando a subcoluna size0 sem ler a coluna inteira. Para arrays multidimensionais, você pode usar sizeN-1, em que N é a dimensão desejada. Exemplo
Query
CREATE TABLE t_arr (`arr` Array(Array(Array(UInt32)))) ENGINE = MergeTree ORDER BY tuple();

INSERT INTO t_arr VALUES ([[[12, 13, 0, 1],[12]]]);

SELECT arr.size0, arr.size1, arr.size2 FROM t_arr;
Response
┌─arr.size0─┬─arr.size1─┬─arr.size2─┐
│         1 │ [2]       │ [[4,1]]   │
└───────────┴───────────┴───────────┘

Leitura de subcolunas aninhadas de Array

Se o tipo aninhado T dentro de Array tiver subcolunas (por exemplo, se for uma tupla nomeada), você poderá ler essas subcolunas de um tipo Array(T) com os mesmos nomes de subcoluna. O tipo de uma subcoluna será um Array do tipo da subcoluna original. Exemplo
CREATE TABLE t_arr (arr Array(Tuple(field1 UInt32, field2 String))) ENGINE = MergeTree ORDER BY tuple();
INSERT INTO t_arr VALUES ([(1, 'Hello'), (2, 'World')]), ([(3, 'This'), (4, 'is'), (5, 'subcolumn')]);
SELECT arr.field1, toTypeName(arr.field1), arr.field2, toTypeName(arr.field2) from t_arr;
┌─arr.field1─┬─toTypeName(arr.field1)─┬─arr.field2────────────────┬─toTypeName(arr.field2)─┐
│ [1,2]      │ Array(UInt32)          │ ['Hello','World']         │ Array(String)          │
│ [3,4,5]    │ Array(UInt32)          │ ['This','is','subcolumn'] │ Array(String)          │
└────────────┴────────────────────────┴───────────────────────────┴────────────────────────┘
Última modificação em 10 de junho de 2026