---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ytsaurus.tech/docs/en/user-guide/data-processing/chyt/reference/configuration.md
  - https://ytsaurus.tech/docs/ru/user-guide/data-processing/chyt/reference/configuration.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ytsaurus.tech/docs/ru/llms.txt

<!-- source: ru/_includes/user-guide/data-processing/chyt/reference/configuration.md -->
# Конфигурация клики

Вся конфигурация клики описывается одним [YSON-документом](https://ytsaurus.tech/docs/ru/user-guide/storage/yson-docs.md), называемым *спеклет* (speclet).

Спеклет клики хранится в Кипарисе по пути `//sys/strawberry/chyt/<alias>/speclet`. Также его содержимое можно посмотреть в [веб-интерфейсе](https://ytsaurus.tech/docs/ru/user-guide/data-processing/chyt/cliques/ui.md) на вкладке **Speclet** или получить с помощью команды CLI `yt clickhouse ctl get-speclet`.  

Спеклет представляет собой набор [опций](https://ytsaurus.tech/docs/ru/user-guide/data-processing/chyt/cliques/configs.md#options), которые интерпретируются контроллером во время запуска клики. В частности, на основе данных опций контроллер генерирует конечную конфигурацию CHYT-инстансов.

Важным отличием CHYT от оригинального ClickHouse является то, что настройки задаются не в XML-формате, а в родном для системы YTsaurus YSON-формате. [Ниже](#clickhouse_config) описан принцип, по которому интерпретируются настройки в таком формате.

## Как формируется конфигурация { #how-form }

При составлении конфигурации используется следующая информация:

1. Базовый конфиг из Кипариса `//sys/clickhouse/config`.
2. [Опции](https://ytsaurus.tech/docs/ru/user-guide/data-processing/chyt/cliques/configs.md#options), описанные в спеклете.
3. Конфигурация нативного подключения к кластеру, которая берётся из содержимого `//sys/@cluster_connection`.

{% note warning "Внимание" %}

Все инстансы клики всегда работают с одной и той же конфигурацией. Поменять конфигурацию без перезапуска клики невозможно.

{% endnote %}

## Продвинутая конфигурация YTsaurus-части инстанса { #yt_config }

YTsaurus-часть конфигурации инстанса живёт в опции `yt_config`. Через данную опцию можно задать продвинутые настройки, которые не вынесены в отдельные опции спеклета. Поддерживаются следующие подопции:

- `settings` — CHYT-специфичные [настройки](https://ytsaurus.tech/docs/ru/user-guide/data-processing/chyt/reference/settings.md) запросов по умолчанию. Изменение настройки в данном разделе приводит к изменению значения по умолчанию для этой настройки для всех запросов в клике.

- `table_writer` — [конфигурация Table Writer](https://ytsaurus.tech/docs/ru/user-guide/storage/io-configuration.md#table_writer).

- `table_attribute_cache` — конфигурация кеша атрибутов таблиц. Данный кеш существенно повышает отзывчивость CHYT, но на текущий момент потенциально может приводить к неконсистентным чтениям (в таблице данные уже появились, а CHYT их еще не видит). Чтобы отключить данный кеш, можно воспользоваться конфигурацией:
  ```
  {read_from=follower;expire_after_successful_update_time=0;expire_after_failed_update_time=0;refresh_time=0;expire_after_access_time=0}
  ```
- `create_table_default_attributes` [`{optimize_for = scan}`] — атрибуты по умолчанию, с которыми будут создаваться таблицы при `CREATE`-запросах в CHYT.

- `health_checker` — конфигурация Health Checker. Состоит из 3 полей:

  — `queries` [``["select * from `//sys/clickhouse/sample_table`"]``] — список тестовых запросов, работоспособность которых будет регулярно проверяться.

  {% note warning "Внимание" %}

    Запросы от Health Checker на данный момент исполняются от имени пользователя `yt-clickhouse`, который должен иметь права `read` на доступ к таблице.

  {% endnote %}

  — `period` [60000] — период срабатывания проверки в миллисекундах.

  — `timeout` [`0.9 * period / len(queries)`] — таймаут на срабатывание каждого из сконфигурированных запросов. Если запрос не укладывается в таймаут, он считается `failed`.

- `subquery` — конфигурация основной части системы, которая координирует исполнение ClickHouse-запросов поверх таблиц YTsaurus. Перед конфигурированием этой части прочитайте статью об [исполнении запроса внутри клики](https://ytsaurus.tech/docs/ru/user-guide/data-processing/chyt/queries/anatomy.md#query-execution).

  — `min_data_weight_per_thread` [64 MiB] — (в байтах) при нарезании входа на подзапросы координатор будет пытаться выдать на каждое ядро каждого инстанса не меньше, чем заданный объем.

  — `max_data_weight_per_subquery` [50 GiB] — (в байтах) максимальный допустимый объем данных, обрабатываемый на одном ядре одного инстанса. Данное ограничение является защитным и защищает пользователей клики от случайного запуска огромного запроса, обрабатывающего петабайты. Константа 50 GiB выбрана из соображения, что такой объем обрабатывается на одном ядре примерно за десятки минут.

- `show_tables` — конфигурация поведения запроса `SHOW TABLES`. Позволяет настроить список директорий, в которых `SHOW TABLES` будет показывать список таблиц.

  — `roots` — список YPath-путей директорий в Кипарисе, из которых будут собираться таблицы для показа по `SHOW TABLES`.

{% note warning "Внимание" %}

Ограничение на `max_data_weight_per_subquery` использует поколоночные статистики для учета колоночной выборки из обрабатываемых таблиц. Поколоночная статистика может отсутствовать для старых таблиц, созданных до ее появления. Для таких таблиц поколоночность в ограничении не учитывается. Это означает, что при обработке очень узкого среза колонок, образующего 1% от общего объема таблицы и составляющего 1 GiB в пересчете на ядро, CHYT посчитает, что обрабатывается 100 GiB на ядро. CHYT не запустит такой запрос с настройками по умолчанию.

Если необходим именно такой сценарий, либо необходимо обрабатывать большие объемы данных, стоит выставить эту настройку в произвольно большее значение.

{% endnote %}

## Продвинутая конфигурация ClickHouse-части инстанса { #clickhouse_config }

Для настройки конфигурации ClickHouse-части предназначена опция `clickhouse_config`. Задавать эту опцию необходимо таким образом, чтобы она соответствовала стандартной XML конфигурации ClickHouse.

Правила преобразования XML конфигурации ClickHouse в YSON конфигурацию CHYT можно описать следующим образом:

- Любой не множественный по смыслу в конфигурации ClickHouse узел конфигурации является словарем (`map`).
- Множественный узел представлен списком (`list`).

Ниже представлен пример преобразования искусственной XML конфигурации в YSON конфигурацию:


```xml
<foo>42</foo>
<bar>qwe</bar>
<baz>
    <quux>3.14</quux>
</baz>
<baz></baz>
<baz>hi!</baz>
```


```json
{
    foo = 42;
    bar = "qwe";
    baz = [
        {quux = 3.14};
        {};
        "hi!";
    ];
}
```

Отметим подопции `clickhouse_config`, которые могут оказаться удобны в CHYT:

- `dictionaries` (`[]`) — конфигурация внешних словарей. Значением должен быть список конфигураций словарей. Каждый словарь конфигурируется map'ом со следующими полями, сохраняющими смысл оригинальной конфигурации ClickHouse:
  - `name` — имя внешнего словаря;
  - `source` — [источник данных](https://clickhouse.com/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources/) для внешнего словаря;
  - `layout` — [представление](https://clickhouse.com/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout/) внешнего словаря в памяти инстанса;
  - `structure` — [схема данных](https://clickhouse.com/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-structure/), хранящихся в словаре;
  - `lifetime` — [время жизни](https://clickhouse.com/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-lifetime/) словаря.

## Внешние словари { #external-dict }

CHYT поддерживает все настройки `layout`, `structure` и `lifetime` обычного ClickHouse.

{% note info "Примечание" %}

В качестве `source` можно указывать источники от оригинального ClickHouse, но их работоспособность не гарантируется. В частности, источники, требующие сетевого взаимодействия, технически должны работать, но на практике могут столкнуться с отсутствием сетевых доступов.

{% endnote %}

Также есть дополнительный тип источника данных, в котором можно использовать статические таблицы в YTsaurus. Данный тип называется `yt` и имеет один параметр:

- `path` — путь к статической таблице на кластере, которая будет служить источником данных для словаря.

В качестве примера подключения YTsaurus таблицы как внешнего словаря ClickHouse можно посмотреть на:
- [Пример конфигурации](https://ytsaurus.tech/docs/ru/user-guide/data-processing/chyt/reference/configuration.md#configuration_example) CHYT, подключающий данную таблицу как внешний словарь ClickHouse.
- Пример использования внешнего словаря в запросах:

```sql
select dictGet('OS', 'OS', toUInt64(38)) as os_name,
    dictGetHierarchy('OS', toUInt64(38)) as hierarchy,
    dictGetChildren('OS', toUInt64(101)) as children
```

## Пример конфигурации { #configuration_example }

Ниже приведен пример полной конфигурации, которую можно указать c помощью команды `set-speclet`.

```json
{
    instance_count = 1;
    query_settings = {
        extremes = 1;
    };
    yt_config = {
        subquery = {
            max_data_weight_per_subquery = 1000000000000;
        };
    };
    clickhouse_config = {
        dictionaries = [
            {
                name = OS;
                layout = {flat = {}};
                structure = {
                    id = {name = Id};
                    attribute = [
                        {
                            name = "OS";
                            type = "Nullable(String)";
                            null_value = "NULL";
                        };
                        {
                            name = "ParentId";
                            type = "Nullable(UInt64)";
                            null_value = "NULL";
                            hierarchical = %true;
                        };
                        {
                            name = "RootId";
                            type = "Nullable(UInt64)";
                            null_value = "NULL";
                        };
                    ];
                };
                lifetime = 0;
                source = {yt = {path = "//sys/clickhouse/dictionaries/OS"}};
            };
        ];
    };
}
```
<!-- endsource: ru/_includes/user-guide/data-processing/chyt/reference/configuration.md -->