# Ключ и поля словаря
Секция `` описывает ключ словаря и поля, доступные для запросов.
Общий вид структуры:
```xml
Id
...
```
В структуре описываются столбцы:
- `` - [ключевой столбец](external_dicts_dict_structure.md#dicts-external_dicts_dict_structure-key).
- `` - [столбец данных](external_dicts_dict_structure.md#dicts-external_dicts_dict_structure-attributes). Столбцов может быть много.
## Ключ
ClickHouse поддерживает следующие виды ключей:
- Числовой ключ. Формат UInt64. Описывается в теге ``.
- Составной ключ. Набор значений разного типа. Описывается в теге ``.
Структура может содержать либо `` либо ``.
!!! attention "Обратите внимание"
Ключ не надо дополнительно описывать в атрибутах.
### Числовой ключ
Формат: `UInt64`.
Пример конфигурации:
```xml
Id
```
Поля конфигурации:
- name - имя столбца с ключами.
### Составной ключ
Ключом может быть кортеж (`tuple`) из полей произвольных типов. [layout](external_dicts_dict_layout.md#dicts-external_dicts_dict_layout) в этом случае должен быть `complex_key_hashed` или `complex_key_cache`.
!!! tip "Совет"
Cоставной ключ может состоять из одного элемента. Это даёт возможность использовать в качестве ключа, например, строку.
Структура ключа задаётся в элементе ``. Поля ключа задаются в том же формате, что и [атрибуты](external_dicts_dict_structure.md#dicts-external_dicts_dict_structure-attributes) словаря. Пример:
```xml
field1
String
field2
UInt32
...
...
```
При запросе в функции `dictGet*` в качестве ключа передаётся кортеж. Пример: `dictGetString('dict_name', 'attr_name', tuple('string for field1', num_for_field2))`.
## Атрибуты
Пример конфигурации:
```xml
...
Name
Type
rand64()
true
true
true
```
Поля конфигурации:
- `name` - Имя столбца.
- `type` - Тип столбца. Задает способ интерпретации данных в источнике. Например, в случае MySQL, в таблице-источнике поле может быть `TEXT`, `VARCHAR`, `BLOB`, но загружено может быть как `String`.
- `null_value` - Значение по умолчанию для несуществующего элемента. В примере - пустая строка.
- `expression` - Атрибут может быть выражением. Тег не обязательный.
- `hierarchical` - Поддержка иерархии. Отображение в идентификатор родителя. По умолчанию, `false`.
- `injective` - Признак инъективности отображения `id -> attribute`. Если `true`, то можно оптимизировать `GROUP BY`. По умолчанию, `false`.
- `is_object_id` - Признак того, что запрос выполняется к документу MongoDB по `ObjectID`.
[Оригинальная статья](https://clickhouse.yandex/docs/ru/query_language/dicts/external_dicts_dict_structure/)