Перейти к основному содержанию
Необязательная структура данных, предварительно подготовленная для использования в операциях JOIN.
В ClickHouse Cloud, если ваш сервис был создан с версией ниже 25.4, вам потребуется установить совместимость не ниже 25.4 с помощью SET compatibility=25.4.

Создание таблицы

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
) ENGINE = Join(join_strictness, join_type, k1[, k2, ...])
См. подробное описание запроса CREATE TABLE.

Параметры движка

join_strictness

join_strictnessрежим строгости JOIN.

join_type

join_typeтип JOIN.

Столбцы ключа

k1[, k2, ...] — столбцы ключа из предложения USING, по которым выполняется операция JOIN. Укажите параметры join_strictness и join_type без кавычек, например: Join(ANY, LEFT, col1). Они должны соответствовать операции JOIN, для которой будет использоваться таблица. Если параметры не совпадают, ClickHouse не сгенерирует исключение и может вернуть некорректные данные.

Особенности и рекомендации

Хранение данных

Данные таблицы Join всегда хранятся в оперативной памяти. При вставке строк в таблицу ClickHouse записывает блоки данных в каталог на диске, чтобы их можно было восстановить после перезапуска сервера. Если сервер перезапустился некорректно, блок данных на диске может быть утерян или повреждён. В этом случае может потребоваться вручную удалить файл с повреждёнными данными.

Выборка и вставка данных

Вы можете использовать запросы INSERT, чтобы добавлять данные в таблицы движка Join. Если таблица была создана со строгостью ANY, данные для повторяющихся ключей игнорируются. При строгости ALL добавляются все строки. Основные сценарии использования таблиц движка Join следующие:
  • Размещать таблицу в правой части выражения JOIN.
  • Вызывать функцию joinGet, которая позволяет извлекать данные из таблицы так же, как из словаря.

Удаление данных

Запросы ALTER DELETE для таблиц движка Join реализованы как мутации. Мутация DELETE считывает отфильтрованные данные и перезаписывает данные в памяти и на диске.

Ограничения и настройки

При создании таблицы применяются следующие настройки:

join_use_nulls

join_use_nulls

max_rows_in_join

max_rows_in_join

max_bytes_in_join

max_bytes_in_join

join_overflow_mode

join_overflow_mode

join_any_take_last_row

join_any_take_last_row

join_use_nulls

Persistent

Отключает постоянное хранение данных для движков таблиц Join и Set. Снижает накладные расходы на I/O. Подходит для сценариев, где важна производительность и не требуется постоянное хранение данных. Возможные значения:
  • 1 — Включено.
  • 0 — Отключено.
Значение по умолчанию: 1. Таблицы движка Join нельзя использовать в операциях GLOBAL JOIN. Движок Join позволяет указать настройку join_use_nulls в операторе CREATE TABLE. В запросе SELECT должно использоваться то же значение join_use_nulls.

Примеры использования

Создание левой таблицы:
CREATE TABLE id_val(`id` UInt32, `val` UInt32) ENGINE = TinyLog;
INSERT INTO id_val VALUES (1,11)(2,12)(3,13);
Создание правой таблицы Join:
CREATE TABLE id_val_join(`id` UInt32, `val` UInt8) ENGINE = Join(ANY, LEFT, id);
INSERT INTO id_val_join VALUES (1,21)(1,22)(3,23);
JOIN таблиц:
SELECT * FROM id_val ANY LEFT JOIN id_val_join USING (id);
┌─id─┬─val─┬─id_val_join.val─┐
│  1 │  11 │              21 │
│  2 │  12 │               0 │
│  3 │  13 │              23 │
└────┴─────┴─────────────────┘
В качестве альтернативы вы можете получить данные из таблицы Join, указав значение ключа для JOIN:
SELECT joinGet('id_val_join', 'val', toUInt32(1));
┌─joinGet('id_val_join', 'val', toUInt32(1))─┐
│                                         21 │
└────────────────────────────────────────────┘
Удаление строки из таблицы Join:
ALTER TABLE id_val_join DELETE WHERE id = 3;
┌─id─┬─val─┐
│  1 │  21 │
└────┴─────┘
Последнее изменение 10 июня 2026 г.