
В этом руководстве показано, как выполнить миграцию с самоуправляемого сервера ClickHouse в ClickHouse Cloud, а также как переносить данные между сервисами ClickHouse Cloud.
Функция remoteSecure используется в запросах SELECT и INSERT для доступа к удалённым серверам ClickHouse, что позволяет переносить таблицы так же просто, как выполнить запрос INSERT INTO со встроенным SELECT.
Миграция с самоуправляемого ClickHouse в ClickHouse Cloud

Независимо от того, разбита ли ваша исходная таблица на сегменты и/или реплицируется ли она, в ClickHouse Cloud вам нужно только создать целевую таблицу (параметр Engine для этой таблицы можно не указывать — SharedMergeTree будет автоматически выбран в качестве движка таблицы),
а ClickHouse Cloud автоматически позаботится о вертикальном и горизонтальном масштабировании.
Вам не нужно думать о том, как реплицировать таблицу и разбивать её на сегменты.
В этом примере самоуправляемый сервер ClickHouse является источником, а сервис ClickHouse Cloud — пунктом назначения.
Обзор
Процесс выглядит следующим образом:
- Добавьте в исходный сервис пользователя только для чтения
- Продублируйте структуру исходной таблицы в целевом сервисе
- Перенесите данные из источника в целевой сервис методом Pull или Push — в зависимости от сетевой доступности источника
- Удалите исходный сервер из IP Access List целевого сервиса (если применимо)
- Удалите из исходного сервиса пользователя только для чтения
Миграция таблиц из одной системы в другую:
В этом примере показана миграция одной таблицы с самоуправляемого сервера ClickHouse в ClickHouse Cloud.
В исходной системе ClickHouse (системе, где сейчас хранятся данные)
- Добавьте пользователя с правами только на чтение, который сможет читать исходную таблицу (
db.tableв этом примере)
CREATE USER exporter
IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
SETTINGS readonly = 1;GRANT SELECT ON db.table TO exporter;- Скопируйте определение таблицы
SELECT create_table_query
FROM system.tables
WHERE database = 'db' AND table = 'table'В целевой системе ClickHouse Cloud:
- Создайте целевую базу данных:
CREATE DATABASE db- Используя оператор CREATE TABLE для исходной таблицы, создайте таблицу назначения.
CREATE TABLE db.table ...- Используйте функцию
remoteSecure, чтобы pull данные из самоуправляемого источника

INSERT INTO db.table SELECT * FROM
remoteSecure('source-hostname', db, table, 'exporter', 'password-here')- Используйте функцию
remoteSecure, чтобы push данные в сервис ClickHouse Cloud

Управление IP Access List
В списке сервисов ClickHouse Cloud выберите сервис, с которым будете работать, и перейдите в раздел Settings. Если в IP Access List нет IP-адреса или диапазона IP-адресов удалённой системы, которой нужно подключиться к вашему сервису ClickHouse Cloud, это можно исправить с помощью Add IPs:

Добавьте отдельный IP-адрес или диапазон адресов, которым нужно подключаться к вашему сервису ClickHouse Cloud. При необходимости измените поля формы, а затем нажмите Save.

INSERT INTO FUNCTION
remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table',
'default', 'PASS') SELECT * FROM db.tableМиграция между сервисами ClickHouse Cloud

Вот несколько примеров, когда может потребоваться миграция данных между сервисами ClickHouse Cloud:
- Миграция данных из восстановленной резервной копии
- Копирование данных из сервиса разработки в staging-сервис (или из staging в production)
В этом примере используются два сервиса ClickHouse Cloud, которые далее будут называться источник и пункт назначения. Данные будут переноситься из источника в пункт назначения по схеме pull. При желании можно использовать и push, но здесь показан pull, так как в этом случае используется пользователь только для чтения.

Миграция состоит из нескольких шагов:
- Определите один сервис ClickHouse Cloud как источник, а другой — как пункт назначения
- Добавьте пользователя только для чтения в исходный сервис
- Продублируйте структуру исходной таблицы в целевом сервисе
- Временно разрешите доступ по IP к исходному сервису
- Скопируйте данные из источника в пункт назначения
- Снова настройте IP Access List для пункта назначения
- Удалите пользователя только для чтения из исходного сервиса
Добавьте в исходный сервис пользователя с правом только на чтение
-
Добавьте пользователя с правом только на чтение, которому будет доступно чтение исходной таблицы (
db.tableв этом примере)CREATE USER exporter IDENTIFIED WITH SHA256_PASSWORD BY 'password-here' SETTINGS readonly = 1;GRANT SELECT ON db.table TO exporter; -
Скопируйте определение таблицы
select create_table_query from system.tables where database = 'db' and table = 'table'
Продублируйте структуру таблицы в целевом сервисе
В целевом сервисе создайте базу данных, если она ещё не существует:
-
Создайте целевую базу данных:
CREATE DATABASE db -
Используя оператор CREATE TABLE из исходного сервиса, создайте таблицу в целевом сервисе.
В целевом сервисе создайте таблицу, используя результат
select create_table_query...из исходного сервиса:CREATE TABLE db.table ...
Разрешите удалённый доступ к сервису-источнику
Чтобы pull данные из источника в пункт назначения, сервис-источник должен принимать подключения. Временно отключите функцию IP Access List на сервисе-источнике.
Измените список разрешённых и временно выберите доступ Anywhere. Подробности см. в документации IP Access List.
Скопируйте данные из исходного сервиса в целевой сервис
-
Используйте функцию
remoteSecure, чтобы pull данные из исходного сервиса ClickHouse Cloud Подключитесь к целевому сервису. Выполните эту команду на целевом сервисе ClickHouse Cloud:INSERT INTO db.table SELECT * FROM remoteSecure('source-hostname', db, table, 'exporter', 'password-here') -
Проверьте данные в целевом сервисе
Повторно настройте IP Access List для исходного сервиса
Если вы ранее экспортировали список доступа, то можете импортировать его обратно с помощью Share; в противном случае снова добавьте свои IP-адреса в список доступа.
Удалите пользователя exporter только для чтения
DROP USER exporter- Измените IP Access List сервиса, чтобы ограничить доступ