# Ключ и поля словаря Секция `` описывает ключ словаря и поля, доступные для запросов. Общий вид структуры: ```xml Id ... ``` В структуре описываются столбцы: - `` - [ключевой столбец](external_dicts_dict_structure.md). - `` - [столбец данных](external_dicts_dict_structure.md). Столбцов может быть много. ## Ключ ClickHouse поддерживает следующие виды ключей: - Числовой ключ. Формат UInt64. Описывается в теге ``. - Составной ключ. Набор значений разного типа. Описывается в теге ``. Структура может содержать либо `` либо ``. !!! attention "Обратите внимание" Ключ не надо дополнительно описывать в атрибутах. ### Числовой ключ Формат: `UInt64`. Пример конфигурации: ```xml Id ``` Поля конфигурации: - name - имя столбца с ключами. ### Составной ключ Ключом может быть кортеж (`tuple`) из полей произвольных типов. [layout](external_dicts_dict_layout.md) в этом случае должен быть `complex_key_hashed` или `complex_key_cache`. !!! tip "Совет" Cоставной ключ может состоять из одного элемента. Это даёт возможность использовать в качестве ключа, например, строку. Структура ключа задаётся в элементе ``. Поля ключа задаются в том же формате, что и [атрибуты](external_dicts_dict_structure.md) словаря. Пример: ```xml field1 String field2 UInt32 ... ... ``` При запросе в функции `dictGet*` в качестве ключа передаётся кортеж. Пример: `dictGetString('dict_name', 'attr_name', tuple('string for field1', num_for_field2))`. ## Атрибуты {#ext_dict_structure-attributes} Пример конфигурации: ```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/)