Passer au contenu principal
Un tableau d’éléments de type T, dont le premier indice est 1. T peut être n’importe quel type de données, y compris un tableau.

Créer un Array

Vous pouvez utiliser une fonction pour créer un Array :
array(T)
Vous pouvez également utiliser [].
[]
Exemple de création d’un tableau :
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)       │
└───────┴────────────────────┘

Travailler avec les types de données

Lors de la création d’un tableau à la volée, ClickHouse définit automatiquement le type des arguments comme le type de données le plus étroit capable de stocker tous les arguments listés. S’il y a des valeurs Nullable ou des valeurs littérales NULL, le type des éléments du tableau devient lui aussi Nullable. Si ClickHouse ne parvient pas à déterminer le type de données, il génère une exception. C’est par exemple le cas lorsqu’on essaie de créer un tableau contenant à la fois des chaînes de caractères et des nombres (SELECT array(1, 'a')). Exemples de détection automatique du type de données :
SELECT array(1, 2, NULL) AS x, toTypeName(x)
┌─x──────────┬─toTypeName(array(1, 2, NULL))─┐
│ [1,2,NULL] │ Array(Nullable(UInt8))        │
└────────────┴───────────────────────────────┘
Si vous essayez de créer un tableau avec des types de données incompatibles, ClickHouse génère une exception :
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.

Taille d’un Array

Il est possible de déterminer la taille d’un Array en utilisant la sous-colonne size0 sans lire toute la colonne. Pour les Arrays multidimensionnels, vous pouvez utiliser sizeN-1, où N correspond à la dimension souhaitée. Exemple
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]]   │
└───────────┴───────────┴───────────┘

Lecture des sous-colonnes imbriquées d’un Array

Si le type imbriqué T dans Array possède des sous-colonnes (par exemple, s’il s’agit d’un tuple nommé), vous pouvez lire ces sous-colonnes à partir d’un type Array(T) en conservant les mêmes noms de sous-colonnes. Le type d’une sous-colonne sera un Array du type de la sous-colonne d’origine. Exemple
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)          │
└────────────┴────────────────────────┴───────────────────────────┴────────────────────────┘
Dernière modification le 25 juin 2026