4.4 KiB
Ключ и поля словаря
Секция <structure>
описывает ключ словаря и поля, доступные для запросов.
Общий вид структуры:
<dictionary>
<structure>
<id>
<name>Id</name>
</id>
<attribute>
<!-- Attribute parameters -->
</attribute>
...
</structure>
</dictionary>
В структуре описываются столбцы:
<id>
-ключевой столбец.<attribute>
-столбец данных. Столбцов может быть много.
Ключ
ClickHouse поддерживает следующие виды ключей:
- Числовой ключ. Формат UInt64. Описывается в теге
<id>
. - Составной ключ. Набор значений разного типа. Описывается в теге
<key>
.
Структура может содержать либо <id>
либо <key>
.
Ключ не надо дополнительно описывать в атрибутах.
Числовой ключ
Формат: UInt64
.
Пример конфигурации:
<id>
<name>Id</name>
</id>
Поля конфигурации:
- name - имя столбца с ключами.
Составной ключ
Ключем может быть кортеж (tuple
) из полей произвольных типов. layout в этом случае должен быть complex_key_hashed
или complex_key_cache
.
Cоставной ключ может состоять и из одного элемента, что даёт возможность использовать в качестве ключа, например, строку.
Структура ключа задаётся в элементе <key>
. Поля ключа задаются в том же формате, что и атрибуты словаря. Пример:
<structure>
<key>
<attribute>
<name>field1</name>
<type>String</type>
</attribute>
<attribute>
<name>field2</name>
<type>UInt32</type>
</attribute>
...
</key>
...
При запросе в функции dictGet*
в качестве ключа передаётся кортеж. Пример: dictGetString('dict_name', 'attr_name', tuple('string for field1', num_for_field2))
.
Атрибуты
Пример конфигурации:
<structure>
...
<attribute>
<name>Name</name>
<type>Type</type>
<null_value></null_value>
<expression>rand64()</expression>
<hierarchical>true</hierarchical>
<injective>true</injective>
</attribute>
</structure>
Поля конфигурации:
name
- Имя столбца.type
- Тип столбца. Задает способ интерпретации данных в источнике. Например, в случае MySQL, в таблице-источнике поле может бытьTEXT
,VARCHAR
,BLOB
, но загружено может быть какString
.null_value
- Значение по умолчанию для несуществующего элемента. В примере - пустая строка.expression
- Атрибут может быть выражением. Тег не обязательный.hierarchical
- Поддержка иерархии. Отображение в идентификатор родителя. По умолчанию,false
.injective
- Признак инъективности отображенияid -> attribute
. Еслиtrue
, то можно оптимизироватьGROUP BY
. По умолчанию,false
.