Перейти к основному содержанию
Если вы используете словарь в ClickHouse Cloud, для создания словарей используйте вариант с DDL-запросом, а сам словарь создавайте от имени пользователя default. Также проверьте список поддерживаемых источников для словарей в руководстве по совместимости с Cloud.
Клауза structure описывает ключ словаря и поля, доступные в запросах. Описание XML:
<dictionary>
    <structure>
        <id>
            <name>Id</name>
        </id>

        <attribute>
            <!-- Параметры атрибута -->
        </attribute>

        ...

    </structure>
</dictionary>
Атрибуты описываются в элементах:
  • <id> — ключевой столбец
  • <attribute> — столбец данных: атрибутов может быть несколько.
DDL-запрос:
CREATE DICTIONARY dict_name (
    Id UInt64,
    -- атрибуты
)
PRIMARY KEY Id
...
Атрибуты задаются в теле запроса:
  • PRIMARY KEY — ключевой столбец
  • AttrName AttrType — столбец данных. Атрибутов может быть несколько.

Ключ

ClickHouse поддерживает следующие типы ключей:
  • Числовой ключ. UInt64. Задаётся в теге <id> или с помощью ключевого слова PRIMARY KEY.
  • Составной ключ. Набор значений разных типов. Задаётся в теге <key> или с помощью ключевого слова PRIMARY KEY.
XML-структура может содержать либо <id>, либо <key>. DDL-запрос должен содержать только один PRIMARY KEY.
Не следует описывать ключ как атрибут.

Числовой ключ

Тип: UInt64. Пример конфигурации:
<id>
    <name>Id</name>
</id>
Поля конфигурации:
  • name – имя столбца с ключами.
Для DDL-запроса:
CREATE DICTIONARY (
    Id UInt64,
    ...
)
PRIMARY KEY Id
...
  • PRIMARY KEY – Имя столбца, содержащего ключи.

Составной ключ

Ключом может быть Tuple из полей любых типов. Структура в этом случае должна быть complex_key_hashed или complex_key_cache.
Составной ключ может состоять и из одного элемента. Это позволяет, например, использовать в качестве ключа строку.
Структура ключа задаётся в элементе <key>. Поля ключа указываются в том же формате, что и атрибуты словаря. Пример:
<structure>
    <key>
        <attribute>
            <name>field1</name>
            <type>String</type>
        </attribute>
        <attribute>
            <name>field2</name>
            <type>UInt32</type>
        </attribute>
        ...
    </key>
...
or
CREATE DICTIONARY (
    field1 String,
    field2 UInt32
    ...
)
PRIMARY KEY field1, field2
...
В запросе к функции dictGet* в качестве ключа передаётся Tuple. Пример: dictGetString('dict_name', 'attr_name', tuple('string for field1', num_for_field2)).

Атрибуты

Пример конфигурации:
<structure>
    ...
    <attribute>
        <name>Name</name>
        <type>ClickHouseDataType</type>
        <null_value></null_value>
        <expression>rand64()</expression>
        <hierarchical>true</hierarchical>
        <injective>true</injective>
        <is_object_id>true</is_object_id>
    </attribute>
</structure>
или
CREATE DICTIONARY somename (
    Name ClickHouseDataType DEFAULT '' EXPRESSION rand64() HIERARCHICAL INJECTIVE IS_OBJECT_ID
)
Поля конфигурации:
TagОписаниеОбязательно
nameИмя столбца.Да
typeТип данных ClickHouse: UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32, Float64, UUID, Decimal32, Decimal64, Decimal128, Decimal256,Date, Date32, DateTime, DateTime64, String, Array.
ClickHouse пытается привести значение из словаря к указанному типу данных. Например, в MySQL поле исходной таблицы может иметь тип TEXT, VARCHAR или BLOB, но в ClickHouse его можно загрузить как String.
Nullable в настоящее время поддерживается для словарей Flat, Hashed, ComplexKeyHashed, Direct, ComplexKeyDirect, RangeHashed, Polygon, Cache, ComplexKeyCache, SSDCache, SSDComplexKeyCache. В словарях IPTrie типы Nullable не поддерживаются.
Да
null_valueЗначение по умолчанию для несуществующего элемента.
В примере это пустая строка. Значение NULL можно использовать только для типов Nullable (см. предыдущую строку с описанием типов).
Да
expressionВыражение, которое ClickHouse выполняет над значением.
Выражение может быть именем столбца в удалённой SQL-базе данных. Таким образом, его можно использовать для создания псевдонима удалённого столбца.

Значение по умолчанию: выражение отсутствует.
Нет
hierarchicalЕсли true, атрибут содержит значение родительского ключа для текущего ключа. См. Иерархические словари.

Значение по умолчанию: false.
Нет
injectiveФлаг, показывающий, является ли отображение id -> attribute инъективным.
Если true, ClickHouse может автоматически размещать после предложения GROUP BY запросы к словарям с инъективным отображением. Обычно это значительно уменьшает количество таких запросов.

Значение по умолчанию: false.
Нет
is_object_idФлаг, показывающий, выполняется ли запрос для документа MongoDB по ObjectID.

Значение по умолчанию: false.
Последнее изменение 10 июня 2026 г.