Saltar al contenido principal
Un array de elementos de tipo T, con el índice inicial del array en 1. T puede ser cualquier tipo de datos, incluido un array.

Crear un Array

Puede usar una función para crear un array:
array(T)
También puedes usar [].
[]
Ejemplo de cómo crear un 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)       │
└───────┴────────────────────┘

Trabajar con tipos de datos

Al crear un array sobre la marcha, ClickHouse define automáticamente el tipo del argumento como el tipo de datos más pequeño capaz de almacenar todos los argumentos indicados. Si hay valores Nullable o valores literales NULL, el tipo de los elementos del array también pasa a ser Nullable. Si ClickHouse no puede determinar el tipo de datos, genera una excepción. Por ejemplo, esto ocurre al intentar crear un array con cadenas y números al mismo tiempo (SELECT array(1, 'a')). Ejemplos de detección automática de tipos de datos:
SELECT array(1, 2, NULL) AS x, toTypeName(x)
┌─x──────────┬─toTypeName(array(1, 2, NULL))─┐
│ [1,2,NULL] │ Array(Nullable(UInt8))        │
└────────────┴───────────────────────────────┘
Si intenta crear un Array con tipos de datos incompatibles, ClickHouse lanza una excepción:
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.

Tamaño de Array

Es posible conocer el tamaño de un array usando la subcolumna size0 sin leer toda la columna. Para arrays multidimensionales, puedes usar sizeN-1, donde N es la dimensión deseada. Ejemplo
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]]   │
└───────────┴───────────┴───────────┘

Lectura de subcolumnas anidadas de Array

Si el tipo anidado T dentro de Array tiene subcolumnas (por ejemplo, si es una tupla con nombre), puede leer sus subcolumnas desde un tipo Array(T) con los mismos nombres de subcolumna. El tipo de una subcolumna será un Array del tipo de la subcolumna original. Ejemplo
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 modificación el 10 de junio de 2026