Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Структуры словарей

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

Словари можно хранить в памяти разными способами, и каждый из них предполагает компромисс между использованием 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).
hierarchical Поддержка иерархий с числовым ключом, описывающим отношения родитель-потомок.
polygon Эффективный поиск вхождения Point в Polygon (обратное геокодирование).
regexp_tree Сопоставляет ключи с деревом регулярных выражений.

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

Вы можете настроить структуру словаря с помощью конструкции 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.

Navigation