Перейти к основному содержанию
Движок ExternalDistributed позволяет выполнять SELECT-запросы к данным, хранящимся на удалённых серверах MySQL или PostgreSQL. В качестве аргумента принимает движок MySQL или PostgreSQL, что делает возможным сегментирование.

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

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 = ExternalDistributed('engine', 'host:port', 'database', 'table', 'user', 'password');
См. подробное описание запроса CREATE TABLE. Структура таблицы может отличаться от структуры исходной таблицы:
  • Имена столбцов должны совпадать с именами в исходной таблице, но можно использовать только часть этих столбцов и в любом порядке.
  • Типы столбцов могут отличаться от типов в исходной таблице. ClickHouse пытается преобразовать значения в типы данных ClickHouse.
Параметры движка
  • engine — движок таблицы MySQL или PostgreSQL.
  • host:port — адрес сервера MySQL или PostgreSQL.
  • database — имя удалённой базы данных.
  • table — имя удалённой таблицы.
  • user — имя пользователя.
  • password — пароль пользователя.

Подробности реализации

Поддерживается несколько реплик; перечисляйте их через |, а сегменты — через ,. Например:
CREATE TABLE test_shards (id UInt32, name String, age UInt32, money UInt32) ENGINE = ExternalDistributed('MySQL', `mysql{1|2}:3306,mysql{3|4}:3306`, 'clickhouse', 'test_replicas', 'root', 'clickhouse');
При указании реплик для каждого сегмента при чтении выбирается одна из доступных реплик. Если соединение установить не удаётся, выбирается следующая реплика, и так далее, пока не будут перебраны все реплики. Если подключиться не удаётся ни к одной из реплик, попытка несколько раз повторяется по той же схеме. Вы можете указать любое количество сегментов и любое количество реплик для каждого сегмента. См. также
Последнее изменение 10 июня 2026 г.