Перейти к основному содержанию

Типы структур словаря

Словари можно хранить в памяти разными способами, и каждый из них предполагает компромисс между использованием CPU и оперативной памяти.
СтруктураОписание
flatХранит данные в плоских массивах с индексацией по ключу. Самая быстрая структура, но ключи должны иметь тип UInt64 и быть ограничены max_array_size.
hashedХранит данные в хеш-таблице. Ограничений на размер ключа нет, поддерживается любое количество элементов.
sparse_hashedКак hashed, но в обмен на меньшее использование памяти требует больше CPU.
complex_key_hashedКак hashed, но для составных ключей.
complex_key_sparse_hashedКак sparse_hashed, но для составных ключей.
hashed_arrayАтрибуты хранятся в массивах, а хеш-таблица сопоставляет ключи с индексами массивов. Эффективно использует память при большом количестве атрибутов.
complex_key_hashed_arrayКак hashed_array, но для составных ключей.
range_hashedХеш-таблица с упорядоченными диапазонами. Поддерживает поиск по ключу и диапазону даты/времени.
complex_key_range_hashedКак range_hashed, но для составных ключей.
cacheКэш фиксированного размера в памяти. Хранятся только часто используемые ключи.
complex_key_cacheКак cache, но для составных ключей.
ssd_cacheКак cache, но хранит данные на SSD и использует индекс в памяти.
complex_key_ssd_cacheКак ssd_cache, но для составных ключей.
directБез хранения в памяти — для каждого запроса обращается напрямую к источнику.
complex_key_directКак direct, но для составных ключей.
ip_trieСтруктура префиксного дерева для быстрого поиска по IP-префиксам (на основе CIDR).
Рекомендуемые структурыflat, hashed и complex_key_hashed обеспечивают лучшую производительность запросов. Структуры с кэшированием не рекомендуются из-за потенциально низкой производительности и сложности подбора параметров — подробнее см. в разделе cache.

Укажите структуру словаря

Если вы используете словарь в ClickHouse Cloud, для создания словарей используйте вариант с DDL-запросом, а сам словарь создавайте от имени пользователя default. Также проверьте список поддерживаемых источников для словарей в руководстве по совместимости с Cloud.
Вы можете настроить структуру словаря с помощью конструкции LAYOUT (для DDL) или параметра layout в определениях файла конфигурации.
CREATE DICTIONARY (...)
...
LAYOUT(LAYOUT_TYPE(param value)) -- настройки структуры
...

См. также CREATE DICTIONARY для полного синтаксиса DDL. Словари, в структуре которых нет слова complex-key*, имеют ключ типа UInt64, а словари complex-key* — составной ключ (сложный, с произвольными типами). Пример числового ключа (столбец key_column имеет тип UInt64):
CREATE DICTIONARY dict_name (
    key_column UInt64,
    ...
)
PRIMARY KEY key_column

Пример составного ключа (ключ содержит один элемент типа String):
CREATE DICTIONARY dict_name (
    country_code String,
    ...
)
PRIMARY KEY country_code

Как повысить производительность словаря

Есть несколько способов повысить производительность словаря:
  • Вызывайте функцию для работы со словарём после GROUP BY.
  • Помечайте извлекаемые атрибуты как инъективные. Атрибут называется инъективным, если разным ключам соответствуют разные значения атрибута. Поэтому, если в GROUP BY используется функция, которая получает значение атрибута по ключу, эта функция автоматически выносится из GROUP BY.
ClickHouse генерирует исключение при ошибках, связанных со словарями. Примеры таких ошибок:
  • Не удалось загрузить словарь, к которому выполняется обращение.
  • Ошибка при выполнении запроса к словарю cached.
Вы можете просмотреть список словарей и их статусы в таблице system.dictionaries.
Последнее изменение 10 июня 2026 г.