Настройки запроса
В данном разделе содержится информация о настройках, специфичных для CHYT. Напомним, что в ClickHouse есть большое количество различных настроек, которые можно задавать различными способами: через GET-параметр запроса, непосредственно в запросе через клаузу SETTINGS, при использовании YQL через pragma или иными способами. Список оригинальных настроек ClickHouse доступен в документации.
Настройки, относящиеся к CHYT, начинаются с префикса chyt.
. Некоторые настройки унесены в отдельные подсекции: в таком случае название настройки будет состоять из нескольких токенов, разделённых точками, например chyt.composite.enable_conversion
.
Как обычно в ClickHouse, для логических настроек используются значения 1
и 0
в качестве True
и False
.
Как обычно, многие настройки включают те или иные оптимизации, которые по умолчанию включены и перечислены только для того, чтобы подчеркнуть возможность их отключения в случае некорректной оптимизации.
Доступные настройки
-
enable_columnar_read
[%true
] — включает использование быстрого поколоночного интерфейса чтения для таблиц в scan-формате. -
enable_computed_column_deduction
[%true
] — включает выведение значений для вычислимых ключевых колонок с использованием предиката в WHERE. Например, если ключевая колонкаkey_hash
задана в схеме как результат выраженияfarm_hash(key)
, то при наличии в условии запроса выраженияkey = 'xyz'
в предикат автоматически будет добавлено следствиеkey_hash = 16518849956333482075
. Поддерживаются только условий типаколонка = константное выражение
,кортеж колонок = кортеж константных выражений
,колонка IN кортеж константных выражений
икортеж колонок IN кортеж кортежей константных выражений
. -
infer_dynamic_table_ranges_from_pivot_keys
[%true
] — включает дополнительный шаг выведение диапазонов при запросе по динамической таблице с использованием tablet pivot keys. -
composite
— секция с настройками, относящимися к сложным типамtype_v3
иYSON any/composite
:default_yson_format
[binary
] — формат по умолчанию для представления YSON-строк. Возможные значения -binary, text, pretty
. Обратите внимание, что варианты, отличные отbinary
, менее эффективны, так как требуют явного преобразования из бинарного формата. Функции работы с YSON работают с любым из возможных форматов YSON.
-
dynamic_table
— секция с настройками, относящимися к работе с динамическими таблицами.enable_dynamic_store_read
[%true
] — работать с динамическими таблицами, читая данные из dynamic stores. При выставлении данной опции не получится прочитать таблицу, которая не была примонтирована с атрибутомenable_dynamic_store_read = %true
. Попытка чтения приведёт к ошибке. Если данная опция отключена, то любой запрос будет принудительно читать только данные из chunk stores, т.е. не включая самые свежие данные из memory store (вне зависимости от того, примонтирована ли таблица сenable_dynamic_store_read = %true
или нет).
-
execution
— секция с настройками, влияющими на процесс планирования и выполнения запроса:-
query_depth_limit
[0] — ограничение на максимальную глубину распределенного запроса. При достижении заданной глубины запрос завершается ошибкой. Значение 0 означает отсутствие ограничения. -
join_policy
[distribute_initial
] — режим работы запросов JOIN над YTsaurus-таблицей. Возможные варианты:local
— сам JOIN выполняется локально на координаторе запроса. Левая и правая таблица (или подзапрос) читаются согласно режимуselect_policy
.distribute_initial
(по умолчанию) —JOIN
в изначальном (initial) запросе выполняется распределенно, при этом JOIN в системных (secondary) запросах выполняются локально.distribute
—JOIN
во всех запросах (initial и secondary) выполняется распределенно. Не рекомендуется использоваться данный режим, так как при множественномJOIN
это может привести к экспоненциальному количеству системных (secondary) запросов.
-
select_policy
[distribute_initial
]local
— запросSELECT
полностью читается и обрабатывается только на одном инстансе (координаторе).distribute_initial
(по умолчанию) —SELECT
выполняется распределенно на инстансах клики в изначальном (initial) запросе. В системных (secondary) запросах выполнение происходит локально.distribute
—SELECT
во всех запросах (initial и secondary) выполняется распределенно. Не рекомендуется использоваться данный режим, так как это может привести к экспоненциальному количеству системных (secondary) запросов.
-
join_node_limit
[0] — максимальное количество узлов клики, на которых допускается выполнение распределенного запросаJOIN
. Значение 0 означает отсутствие ограничения (по умолчанию). -
select_node_limit
[0] — максимальное количество узлов клики, на которых допускается выполнение распределенного запросаSELECT
. Значение 0 означает отсутствие ограничения (по умолчанию). -
distribution_seed
[42] — сид, используемый для детерминированного распределения запроса по узлам клики. -
input_streams_per_secondary_query
[0] — ограничение на количество параллельных потоков чтения таблицы на каждом узле клики при выполнении запроса. При значении 0 в качестве ограничения используется значение clickhouse настройкиmax_threads
(по умолчанию). -
filter_joined_subquery_by_sort_key
[%true
] — включает оптимизацию, предварительно фильтрующую правую таблицу (или поздапрос) JOIN по ключу сортировки левой таблицы. -
keep_nulls_in_right_or_full_join
[%true
] — регулирует поведениеRIGHT
иFULL JOIN
в случае, когда в правой таблице (подзапросе) присутствуют значенияNull
в ключевых колонках. При значении%true
запрос исполняется как обычно, в результате запроса будут присутствовать все строки со значениемNull
в ключевых колонках (по умолчанию). При значении%false
допускается отсутствие всех или некоторых строк из правой таблицы со значениемNull
в ключевых колонках, при этом запрос может быть исполнен более эффективно. Если в ключевых колонках правой таблицы (подзапроса) нет значенийNull
, то результат выполнения запроса не зависит от значений данной опции. -
distributed_insert_stage
[with_mergeable_state
(может быть изменено в будущем)] — минимальная стадия выполнения запроса, после которой допускается распределенная запись в таблицу при включенной ClickHouse-настройкеparallel_distributed_insert_select
. Возможные значения:-
none
— никогда не использовать распределенную запись. -
with_mergeable_state
(по умолчанию, может быть изменено в будущем) — использовать распределенную запись, если запрос может быть исполнен распределенно хотя бы до стадииwith_mergeable_state
. Агрегация данных (GROUP BY
,DISTINCT
,LIMIT BY
) и клаузыORDER BY
иLIMIT
могут исполняться независимо на каждом узле клики, поэтому при распределенной записи результат выполнения запроса может содержать несколько строк с одним ключем агрегации, строки могут быть не отсортированы в порядке ORDER BY, а количество строк может превышать заданный LIMIT (но суммарное количество строк будет не больше, чемколичество инстансов в клике
*заданный LIMIT
). -
after_aggregation
— использовать распределенную запись, если запрос может быть исполнен распределенно хотя бы до стадииafter_aggregation
. Гарантируется, что агрегация данных (GROUP BY
,DISTINCT
,LIMIT BY
) будет выполнена до конца, при этом клаузыORDER BY
иLIMIT
могут исполняться независимо на каждом узле клики (что может приводить к нарушению сортировки и превышению заданного лимита строк, как описано выше). Если исполнить запрос до стадииafter_aggregation
распределенно невозможно, запись данных будет выполнена локально с координатора запроса. -
complete
— использовать распределенную запись, только если запрос может быть полностью выполнен распределенно. Результат выполнения запроса с распределенной записью в данном случае не отличим от обычного запроса, все клаузы (агрегация,ORDER BY
иLIMIT
) будут выполнены до конца. Если выполнить запрос распределенно до стадииcomplete
невозможно, запись данных будет выполнена локально с координатора запроса.
-
-
-
caching
— секция с настройками, относящимися к различным кешам, используемым в CHYT:-
table_attributes_invalidate_mode
[sync
] — режим работы механизма инвалидации данных в кеше атрибутов таблиц при изменении таблицы (запросыCREATE TABLE/INSERT INTO/DROP TABLE
). Возможные значения:none
— инвалидации данных в кеше не происходит. Чтение таблиц сразу после изменения может возвращать старые данные, либо приводить к ошибке.local
— инвалидация данных происходит только в локальном кеше инстанса, без каких-либо rpc запросов. Чтение таблиц на других инстансах сразу после изменения может возвращать старые данные, либо приводить к ошибке.async
— инвалидация данных происходит синхронно в локальном кеше и асинхронно на всех инстансах клики. Запрос завершается не дожидаясь инвалидации данных на остальных инстансах клики. Ошибки во время инвалидации данных в кеше не приводят к ошибке выполнения запроса. Чтение таблиц на других инстансах сразу после изменения все еще может возвращать старые данные или приводить к ошибке, но такой промежуток времени после изменения данных сильно меньше, чем в случаяхnone
иlocal
. Рекомендуется использовать режим инвалидации не ниже данного.sync
(по умолчанию) — инвалидация данных происходит синхронно на всех инстансах клики. Время выполнения запроса может быть немного дольше, так как перед завершением необходимо дождаться подтверждения инвалидации кеша на всех инстансах. Ошибки во время инвалидации кеша будут приводить к ошибке выполнения запроса. После успешного выполнения модифицирующего запроса можно сразу же читать измененные таблицы.
-
invalidate_request_timeout
[5000] — таймаут в миллисекундах (мс.) для rpc-запросов к инстансам клики на стадии инвалидации кеша. При превышении данного таймаута будет показана ошибка.
-
-
concat_tables
— секция с настройками, относящимися к функциям объединения таблиц семействаconcatYtTables*
иytTables
:-
missing_column_mode
[read_as_null
] — режим вывода общей схемы колонки, если в одной из таблиц она отсутствует. Возможные значения:throw
— запрос завершится с ошибкой.drop
— колонка будет отсутствовать в общей схеме. Прочитать такую колонку будет невозможно.read_as_null
(по умолчанию) — тип колонки будет заменен наOptional(T)
. В строках из таблиц, где данная колонка отсутствует, значение в колонке будет равноNull
.
-
type_mismatch_mode
[throw
] — режим вывода общей схемы колонки, если типы колонки в разных таблицах различаются и не могут быть приведены друг к другу. Возможные значения:throw
(по умолчанию) — запрос завершится ошибкой.drop
— колонка будет отсутствовать в общей схеме. Прочитать такую колонку будет невозможно.read_as_any
— тип колонки будет заменен наAny
. Все значения будут представлены в виде YSON-строк, с которыми можно работать с помощью функций семействаYSONExtract*
иYPath*
.
-
allow_empty_schema_intersection
[%false
] — разрешает объединение нескольких таблиц, если у них нет ни одной общей колонки. -
max_tables
[250] — максимальное количество таблиц, которые могут быть объединены для чтения. При превышении данного ограничения запрос завершится ошибкой.
-