'string' = integer o como nombres 'string'. ClickHouse solo almacena números, pero permite operar con los valores a través de sus nombres.
ClickHouse admite:
Enumde 8 bits. Puede contener hasta 256 valores enumerados en el intervalo[-128, 127].Enumde 16 bits. Puede contener hasta 65536 valores enumerados en el intervalo[-32768, 32767].
Enum al insertar los datos. También puede usar los tipos Enum8 o Enum16 para asegurarse del tamaño de almacenamiento.
Ejemplos de uso
Enum8('hello' = 1, 'world' = 2):
x solo puede almacenar valores incluidos en la definición del tipo: 'hello' o 'world'. Si intenta guardar cualquier otro valor, ClickHouse generará una excepción. El tamaño de 8 bits para este Enum se elige automáticamente.
Enum.
Enum a un tipo entero.
CAST.
Reglas generales y uso
-128 ... 127 para Enum8 o en el intervalo -32768 ... 32767 para Enum16. Todas las cadenas y todos los números deben ser diferentes. Se permite una cadena vacía. Si se especifica este tipo (en una definición de tabla), los números pueden estar en cualquier orden. Sin embargo, el orden no importa.
Ni la cadena ni el valor numérico de un Enum pueden ser NULL.
Un Enum puede estar contenido en el tipo Nullable. Por lo tanto, si crea una tabla usando la consulta
'hello' y 'world', sino también NULL.
Enum se almacena de la misma forma que Int8 o Int16 con los valores numéricos correspondientes.
Al leer en formato de texto, ClickHouse interpreta el valor como una cadena y busca la cadena correspondiente en el conjunto de valores del Enum. Si no la encuentra, se genera una excepción. Al leer en formato de texto, se lee la cadena y se busca el valor numérico correspondiente. Si no se encuentra, se generará una excepción.
Al escribir en formato de texto, escribe el valor como la cadena correspondiente. Si los datos de la columna contienen valores no válidos (números que no pertenecen al conjunto válido), se genera una excepción. Al leer y escribir en formato binario, funciona igual que con los tipos de datos Int8 e Int16.
El valor predeterminado implícito es el valor con el número más bajo.
Durante ORDER BY, GROUP BY, IN, DISTINCT, etc., los Enum se comportan igual que los números correspondientes. Por ejemplo, ORDER BY los ordena numéricamente. Los operadores de igualdad y comparación funcionan con los Enum igual que con los valores numéricos subyacentes.
Los valores Enum no pueden compararse con números. Los Enum pueden compararse con una cadena constante. Si la cadena con la que se comparan no es un valor válido para el Enum, se generará una excepción. El operador IN es compatible cuando el Enum está en el lado izquierdo y un conjunto de cadenas en el lado derecho. Las cadenas son los valores del Enum correspondiente.
La mayoría de las operaciones numéricas y con cadenas no están definidas para los valores Enum; por ejemplo, sumar un número a un Enum o concatenar una cadena a un Enum.
Sin embargo, el Enum tiene una función toString nativa que devuelve su valor en cadena.
Los valores Enum también pueden convertirse a tipos numéricos mediante la función toT, donde T es un tipo numérico. Cuando T corresponde al tipo numérico subyacente del Enum, esta conversión no tiene coste.
El tipo Enum puede cambiarse sin coste mediante ALTER si solo se modifica el conjunto de valores. Es posible tanto añadir como eliminar miembros del Enum mediante ALTER (eliminarlos es seguro solo si el valor eliminado nunca se ha usado en la tabla). Como medida de seguridad, cambiar el valor numérico de un miembro del Enum definido previamente generará una excepción.
Con ALTER, es posible cambiar un Enum8 por un Enum16 o viceversa, igual que al cambiar un Int8 por un Int16.