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

Атрибуты словаря

Совет

Если вы используете словари с ClickHouse Cloud, используйте DDL-запрос для их создания и создавайте словари от имени пользователя default. Также проверьте список поддерживаемых источников словарей в руководстве по совместимости с ClickHouse Cloud.

Секция structure описывает ключ словаря и поля, доступные для запросов.

Описание в формате XML:

<dictionary>
    <structure>
        <id>
            <name>Id</name>
        </id>

        <attribute>
            <!-- Attribute parameters -->
        </attribute>

        ...

    </structure>
</dictionary>

Атрибуты задаются в элементах:

  • <id> — ключевой столбец
  • <attribute> — столбец данных: атрибутов может быть несколько.

DDL-запрос:

CREATE DICTIONARY dict_name (
    Id UInt64,
    -- attributes
)
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 из полей любых типов. layout в этом случае должен быть 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>
...

или

CREATE DICTIONARY (
    field1 String,
    field2 UInt32
    ...
)
PRIMARY KEY field1, field2
...

В запросе к функции dictGet* в качестве ключа передается кортеж. Пример: 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
)

Параметры конфигурации:

TagDescriptionRequired
nameИмя столбца.Yes
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 поле в исходной таблице MySQL может иметь тип TEXT, VARCHAR или BLOB, но в ClickHouse оно может быть загружено как String.
Nullable в настоящее время поддерживается для словарей Flat, Hashed, ComplexKeyHashed, Direct, ComplexKeyDirect, RangeHashed, Polygon, Cache, ComplexKeyCache, SSDCache, SSDComplexKeyCache. В словарях IPTrie типы Nullable не поддерживаются.
Yes
null_valueЗначение по умолчанию для несуществующего элемента.
В примере это пустая строка. Значение NULL может использоваться только для типов Nullable (см. предыдущую строку с описанием типов).
Yes
expressionВыражение, которое ClickHouse выполняет над значением.
Выражением может быть имя столбца в удалённой SQL базе данных. Таким образом, вы можете использовать его для создания псевдонима для удалённого столбца.

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

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

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

Значение по умолчанию: false.