'string' = integer или как имена 'string'. ClickHouse хранит только числа, но поддерживает операции со значениями по их именам.
ClickHouse поддерживает:
- 8-битный
Enum. Он может содержать до 256 значений в диапазоне[-128, 127]. - 16-битный
Enum. Он может содержать до 65536 значений в диапазоне[-32768, 32767].
Enum при вставке данных. Вы также можете использовать типы Enum8 или Enum16, чтобы явно задать размер хранилища.
Примеры использования
Enum8('hello' = 1, 'world' = 2):
x может хранить только значения, перечисленные в определении типа: 'hello' или 'world'. Если вы попытаетесь сохранить любое другое значение, ClickHouse сгенерирует исключение. Для этого Enum размер в 8 бит выбирается автоматически.
Enum.
Enum к целочисленному типу.
CAST.
Общие правила и использование
-128 ... 127 для Enum8 или в диапазоне -32768 ... 32767 для Enum16. Все строки и числа должны быть разными. Пустая строка допустима. Если этот тип указан (в определении таблицы), числа могут идти в произвольном порядке. Однако этот порядок не имеет значения.
Ни строка, ни числовое значение в Enum не могут быть NULL.
Enum может входить в тип Nullable. Поэтому, если вы создаёте таблицу с помощью запроса
'hello' и 'world', но и NULL.
Enum хранится так же, как Int8 или Int16 с соответствующими числовыми значениями.
При чтении в текстовом виде ClickHouse разбирает значение как строку и ищет её среди значений Enum. Если строка не найдена, генерируется исключение. При чтении в текстовом формате считывается строка, после чего для неё определяется соответствующее числовое значение. Если оно не найдено, будет сгенерировано исключение.
При записи в текстовом виде значение записывается как соответствующая строка. Если данные столбца содержат некорректные значения (числа, отсутствующие в допустимом наборе), генерируется исключение. При чтении и записи в бинарном виде всё работает так же, как для типов данных Int8 и Int16.
Неявное значение по умолчанию — значение с наименьшим номером.
При ORDER BY, GROUP BY, IN, DISTINCT и так далее Enum ведут себя так же, как соответствующие числа. Например, ORDER BY сортирует их численно. Операторы равенства и сравнения работают с Enum так же, как и с базовыми числовыми значениями.
Значения Enum нельзя сравнивать с числами. Enum можно сравнивать с константной строкой. Если строка, с которой выполняется сравнение, не является допустимым значением для Enum, будет сгенерировано исключение. Оператор IN поддерживается, если слева стоит Enum, а справа — набор строк. Эти строки являются значениями соответствующего Enum.
Для значений Enum не определено большинство числовых и строковых операций, например сложение числа с Enum или конкатенация строки с Enum.
Однако у Enum есть естественная функция toString, которая возвращает его строковое значение.
Значения Enum также можно преобразовывать в числовые типы с помощью функции toT, где T — числовой тип. Когда T соответствует базовому числовому типу enum, такое преобразование не требует дополнительных затрат.
Тип Enum можно без дополнительных затрат изменить с помощью ALTER, если меняется только набор значений. С помощью ALTER можно как добавлять, так и удалять элементы Enum (удаление безопасно только в том случае, если удалённое значение никогда не использовалось в таблице). В качестве меры предосторожности изменение числового значения ранее определённого элемента Enum приведёт к генерации исключения.
С помощью ALTER можно изменить Enum8 на Enum16 или наоборот, так же как Int8 меняется на Int16.