Skip to main content
Эти настройки доступны в system.settings и автоматически сгенерированы на основе исходного кода.

join_algorithm

Указывает, какой алгоритм JOIN используется. Можно указать несколько алгоритмов; для конкретного запроса будет выбран доступный вариант в зависимости от kind/strictness и движка таблицы. Возможные значения:
  • grace_hash
Используется Grace hash join. Grace hash — это вариант алгоритма, обеспечивающий производительное выполнение сложных JOIN при ограниченном потреблении памяти. На первом этапе grace JOIN считывает правую таблицу и разбивает её на N бакетов в зависимости от значения hash в столбцах ключа (изначально N равно grace_hash_join_initial_buckets). Это делается так, чтобы каждый бакет можно было обрабатывать независимо. Строки из первого бакета добавляются во внутреннюю hash table, а остальные сохраняются на disk. Если hash table вырастает сверх memory limit (например, заданного через max_bytes_in_join), количество бакетов увеличивается, и для каждой строки заново определяется назначенный бакет. Все строки, которые не принадлежат текущему бакету, сбрасываются и перераспределяются. Поддерживает INNER/LEFT/RIGHT/FULL ALL/ANY JOIN.
  • hash
Используется алгоритм Hash join. Это наиболее универсальная реализация, поддерживающая все комбинации kind и strictness, а также несколько ключей JOIN, объединённых с помощью OR в секции JOIN ON. При использовании алгоритма hash правая часть JOIN загружается в оперативную память.
  • parallel_hash
Вариант hash JOIN, который разбивает данные на бакеты и параллельно строит несколько hash table вместо одной, чтобы ускорить этот процесс. При использовании алгоритма parallel_hash правая часть JOIN загружается в оперативную память.
  • partial_merge
Вариант алгоритма sort-merge, в котором полностью сортируется только правая таблица. RIGHT JOIN и FULL JOIN поддерживаются только со strictness ALL (SEMI, ANTI, ANY и ASOF не поддерживаются). При использовании алгоритма partial_merge ClickHouse сортирует данные и выгружает их на disk. Алгоритм partial_merge в ClickHouse немного отличается от классической реализации. Сначала ClickHouse сортирует правую таблицу по join keys блоками и создаёт min-max index для отсортированных блоков. Затем он сортирует части левой таблицы по join key и выполняет их JOIN с правой таблицей. Min-max index также используется для пропуска ненужных блоков правой таблицы.
  • direct
Алгоритм direct (также известный как nested loop) выполняет lookup в правой таблице, используя строки из левой таблицы в качестве ключей. Он поддерживается специальными хранилищами, такими как Dictionary, EmbeddedRocksDB и таблицами MergeTree. Для таблиц MergeTree алгоритм передаёт фильтры по join key напрямую на уровень хранения. Это может быть эффективнее, если ключ позволяет использовать primary key index таблицы для lookup; в противном случае для каждого блока левой таблицы выполняется полное сканирование правой таблицы. Поддерживает INNER и LEFT joins и только одностолбцовые ключи JOIN по равенству без дополнительных условий.
  • auto
Если установлено значение auto, сначала пробуется hash JOIN, а затем алгоритм на лету переключается на другой, если превышается memory limit.
  • full_sorting_merge
Алгоритм sort-merge с полной сортировкой соединяемых таблиц перед выполнением JOIN.
  • prefer_partial_merge
ClickHouse всегда пытается использовать JOIN partial_merge, если это возможно; в противном случае используется hash. Устарело, то же самое, что partial_merge,hash.
  • default (deprecated)
Устаревшее значение, больше его не используйте. То же самое, что direct,hash, то есть сначала используется direct join, а затем hash join (в этом порядке).

join_any_take_last_row

Изменяет поведение операций JOIN со strictness ANY, когда в правой таблице для ключа есть более одной совпадающей строки.
Этот параметр применяется к таблицам с движком Join и алгоритмам JOIN на основе хеша.Если JOIN строится параллельно, порядок строк может быть недетерминированным. Это означает, что join_any_take_last_row = 1 может возвращать недетерминированную строку для запросов ANY JOIN.
Возможные значения:
  • 0 — Если в правой таблице есть более одной совпадающей строки, присоединяется только первая найденная.
  • 1 — Если в правой таблице есть более одной совпадающей строки, присоединяется только последняя найденная.
См. также:

join_default_strictness

Задаёт strictness по умолчанию для секций JOIN. Возможные значения:
  • ALL — Если в правой таблице есть несколько совпадающих строк, ClickHouse создаёт декартово произведение из совпадающих строк. Это обычное поведение JOIN в стандартном SQL.
  • ANY — Если в правой таблице есть несколько совпадающих строк, присоединяется только первая найденная. Если в правой таблице есть только одна совпадающая строка, результаты ANY и ALL будут одинаковыми.
  • ASOF — Для соединения последовательностей с неточным совпадением.
  • Empty string — Если в запросе не указаны ALL или ANY, ClickHouse генерирует исключение.

join_on_disk_max_files_to_merge

Ограничивает количество файлов, используемых для параллельной сортировки в операциях MergeJoin при их выполнении на диске. Чем больше значение настройки, тем больше используется оперативной памяти и тем меньше требуется дисковых операций ввода-вывода. Возможные значения:
  • Любое положительное целое число, начиная с 2.

join_output_by_rowlist_perkey_rows_threshold

Нижний порог среднего числа строк на ключ в правой таблице, определяющий, следует ли использовать вывод по списку строк при hash JOIN.

join_overflow_mode

Определяет, какое действие выполняет ClickHouse, когда при JOIN достигается одно из следующих ограничений: Этот параметр действует только для значений hash и parallel_hash параметра join_algorithm. Другие алгоритмы (например, partial_merge, grace_hash, auto) обрабатывают эти ограничения иначе — выгружают данные на диск, переразбивают их на партиции или переключают стратегию — см. join_algorithm. Возможные значения:
  • THROW — ClickHouse генерирует исключение и останавливает запрос.
  • BREAK — ClickHouse останавливает запрос и не генерирует исключение.
Значение по умолчанию: THROW. См. также

join_use_nulls

Задает поведение JOIN. При слиянии таблиц могут появляться пустые ячейки. ClickHouse заполняет их по-разному в зависимости от этой настройки. Возможные значения:
  • 0 — Пустые ячейки заполняются значением по умолчанию для типа соответствующего поля.
  • 1 — JOIN ведет себя так же, как в стандартном SQL. Тип соответствующего поля преобразуется в Nullable, а пустые ячейки заполняются значением NULL.
Последнее изменение 23 июля 2026 г.