Настройки запроса

В данном разделе содержится информация о настройках, специфичных для 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) запросах выполняются локально.
      • distributeJOIN во всех запросах (initial и secondary) выполняется распределенно. Не рекомендуется использоваться данный режим, так как при множественном JOIN это может привести к экспоненциальному количеству системных (secondary) запросов.
    • select_policy [distribute_initial]

      • local — запрос SELECT полностью читается и обрабатывается только на одном инстансе (координаторе).
      • distribute_initial (по умолчанию) — SELECT выполняется распределенно на инстансах клики в изначальном (initial) запросе. В системных (secondary) запросах выполнение происходит локально.
      • distributeSELECT во всех запросах (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] — максимальное количество таблиц, которые могут быть объединены для чтения. При превышении данного ограничения запрос завершится ошибкой.