ClickHouse/docs/fr/sql-reference/data-types/enum.md
Ivan Blinkov d91c97d15d
[docs] replace underscores with hyphens (#10606)
* Replace underscores with hyphens

* remove temporary code

* fix style check

* fix collapse
2020-04-30 21:19:18 +03:00

6.3 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true f865c9653f 50 Enum

Enum

Type énuméré composé de valeurs nommées.

Les valeurs nommées doivent être déclarées comme 'string' = integer pair. ClickHouse ne stocke que des nombres, mais prend en charge les opérations avec les valeurs à travers leurs noms.

Supports ClickHouse:

  • 8-bit Enum. Il peut contenir jusquà 256 valeurs énumérées dans le [-128, 127] gamme.
  • 16 bits Enum. Il peut contenir jusquà 65 536 valeurs énumérées dans le [-32768, 32767] gamme.

Clickhouse choisit automatiquement le type de Enum lorsque les données sont insérées. Vous pouvez également utiliser Enum8 ou Enum16 types pour être sûr de la taille de stockage.

Exemples DUtilisation

Ici, nous créons une table avec une Enum8('hello' = 1, 'world' = 2) type de colonne:

CREATE TABLE t_enum
(
    x Enum('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog

Colonne x ne peut stocker que les valeurs répertoriées dans la définition de type: 'hello' ou 'world'. Si vous essayez denregistrer une autre valeur, ClickHouse déclenchera une exception. Taille 8 bits pour cela Enum est choisi automatiquement.

INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')
Ok.
INSERT INTO t_enum values('a')
Exception on client:
Code: 49. DB::Exception: Unknown element 'a' for type Enum('hello' = 1, 'world' = 2)

Lorsque vous interrogez des données de la table, ClickHouse affiche les valeurs de chaîne de Enum.

SELECT * FROM t_enum
┌─x─────┐
│ hello │
│ world │
│ hello │
└───────┘

Si vous avez besoin de voir les équivalents numériques des lignes, vous devez Enum valeur en type entier.

SELECT CAST(x, 'Int8') FROM t_enum
┌─CAST(x, 'Int8')─┐
│               1 │
│               2 │
│               1 │
└─────────────────┘

Pour créer une valeur dEnum dans une requête, vous devez également utiliser CAST.

SELECT toTypeName(CAST('a', 'Enum(\'a\' = 1, \'b\' = 2)'))
┌─toTypeName(CAST('a', 'Enum(\'a\' = 1, \'b\' = 2)'))─┐
│ Enum8('a' = 1, 'b' = 2)                             │
└─────────────────────────────────────────────────────┘

Règles générales Et Utilisation

Chacune des valeurs se voit attribuer un nombre dans la plage -128 ... 127 pour Enum8 ou dans la gamme -32768 ... 32767 pour Enum16. Toutes les chaînes et les nombres doivent être différents. Une chaîne vide est autorisé. Si ce type est spécifié (dans une définition de table), les nombres peuvent être dans un ordre arbitraire. Toutefois, lordre na pas dimportance.

Ni la chaîne ni la valeur numérique dans un Enum peut être NULL.

Un Enum peut être contenue dans Nullable type. Donc, si vous créez une table en utilisant la requête

CREATE TABLE t_enum_nullable
(
    x Nullable( Enum8('hello' = 1, 'world' = 2) )
)
ENGINE = TinyLog

il peut stocker non seulement des 'hello' et 'world', mais NULL, ainsi.

INSERT INTO t_enum_nullable Values('hello'),('world'),(NULL)

Dans la mémoire RAM, un Enum la colonne est stockée dans la même manière que Int8 ou Int16 des valeurs numériques correspondantes.

Lors de la lecture sous forme de texte, ClickHouse analyse la valeur sous forme de chaîne et recherche la chaîne correspondante à partir de lensemble des valeurs Enum. Si elle nest pas trouvée, une exception est levée. Lors de la lecture au format texte, la chaîne est lue et la valeur numérique correspondante est recherchée. Une exception sera levée si il nest pas trouvé. Lors de lécriture sous forme de texte, il écrit la valeur correspondante de la chaîne. Si les données de colonne contiennent des déchets (nombres qui ne proviennent pas de lensemble valide), une exception est levée. Lors de la lecture et de lécriture sous forme binaire, cela fonctionne de la même manière que pour les types de données Int8 et Int16. La valeur implicite par défaut est la valeur avec le numéro le plus bas.

Lors ORDER BY, GROUP BY, IN, DISTINCT et ainsi de suite, les Énumérations se comportent de la même façon que les nombres correspondants. Par exemple, ORDER BY les trie numériquement. Les opérateurs dégalité et de comparaison fonctionnent de la même manière sur les énumérations que sur les valeurs numériques sous-jacentes.

Les valeurs Enum ne peuvent pas être comparées aux nombres. Les Enums peuvent être comparés à une chaîne constante. Si la chaîne comparée à nest pas une valeur valide pour Lénumération, une exception sera levée. Lopérateur est pris en charge avec lEnum sur le côté gauche, et un ensemble de chaînes sur le côté droit. Les chaînes sont les valeurs de Lénumération correspondante.

Most numeric and string operations are not defined for Enum values, e.g. adding a number to an Enum or concatenating a string to an Enum. Cependant, Lénumération a un naturel toString fonction qui renvoie sa valeur de chaîne.

Les valeurs Enum sont également convertibles en types numériques en utilisant toT fonction, où T est un type numérique. Lorsque T correspond au type numérique sous-jacent de lénumération, cette conversion est à coût nul. Le type Enum peut être modifié sans coût en utilisant ALTER, si seulement lensemble des valeurs est modifié. Il est possible dajouter et de supprimer des membres de Lénumération en utilisant ALTER (la suppression nest sûre que si la valeur supprimée na jamais été utilisée dans la table). À titre de sauvegarde, la modification de la valeur numérique dun membre Enum précédemment défini lancera une exception.

En utilisant ALTER, il est possible de changer un Enum8 en Enum16 ou vice versa, tout comme changer un Int8 en Int16.

Article Original