Миграция между самостоятельно управляемым ClickHouse и ClickHouse Cloud

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

Независимо от того, шардирована и/или реплицирована ваша исходная таблица, в ClickHouse Cloud вы просто создаёте целевую таблицу (для этой таблицы можно опустить параметр Engine — по умолчанию будет использована таблица ReplicatedMergeTree), и ClickHouse Cloud автоматически позаботится о вертикальном и горизонтальном масштабировании. Вам не нужно думать о том, как реплицировать и шардировать таблицу.
В этом примере самостоятельно управляемый сервер ClickHouse является источником, а сервис ClickHouse Cloud — приёмником.
Обзор
Процесс выглядит следующим образом:
- Добавить пользователя с правами только на чтение в исходный сервис
- Продублировать структуру исходной таблицы в целевом сервисе
- Перенести данные из источника в приёмник (pull) или отправить данные из источника (push) в зависимости от сетевой доступности источника
- Удалить исходный сервер из IP Access List на целевой стороне (если применимо)
- Удалить пользователя с правами только на чтение из исходного сервиса
Миграция таблиц из одной системы в другую:
Этот пример переносит одну таблицу с самостоятельно управляемого сервера ClickHouse в ClickHouse Cloud.
На исходной системе ClickHouse (системе, которая в данный момент хранит данные)
- Добавьте пользователя с правами только на чтение, который может читать исходную таблицу (
db.tableв этом примере)
- Скопируйте описание таблицы
В целевой системе ClickHouse Cloud:
- Создайте целевую базу данных:
- Используя оператор CREATE TABLE из исходной базы данных, создайте таблицу в целевой базе данных.
Измените ENGINE на ReplicatedMergeTree без каких-либо параметров при выполнении оператора CREATE. ClickHouse Cloud всегда реплицирует таблицы и задаёт корректные параметры. При этом сохраните клаузы ORDER BY, PRIMARY KEY, PARTITION BY, SAMPLE BY, TTL и SETTINGS.
- Используйте функцию
remoteSecure, чтобы получить данные из самостоятельно управляемого источника

Если исходная система недоступна из внешних сетей, вы можете отправлять данные (push), а не забирать их (pull), так как функция remoteSecure работает как для выборок (select), так и для вставок (insert). См. следующий вариант.
- Используйте функцию
remoteSecure, чтобы отправить данные в сервис ClickHouse Cloud

Чтобы функция remoteSecure могла подключиться к вашему сервису ClickHouse Cloud, IP-адрес удалённой системы должен быть разрешён в списке IP-доступа. Разверните раздел Управление списком IP-доступа ниже для получения дополнительной информации.
Manage your IP Access List
From your ClickHouse Cloud services list choose the service that you will work with and switch to Settings. If the IP Access List does not contain the IP Address or range of the remote system that needs to connect to your ClickHouse Cloud service, then you can resolve the problem with Add IPs:

Add the individual IP Address, or the range of addresses that need to connect to your ClickHouse Cloud service. Modify the form as you see fit and then Save.

Миграция между сервисами ClickHouse Cloud

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

Миграция состоит из нескольких шагов:
- Определите один сервис ClickHouse Cloud как source, а другой как destination
- Добавьте пользователя только для чтения в сервис source
- Продублируйте структуру таблицы source в сервисе destination
- Временно разрешите доступ по IP к сервису source
- Скопируйте данные из source в destination
- Восстановите IP Access List на сервисе destination
- Удалите пользователя только для чтения из сервиса source
Добавьте пользователя только для чтения в сервис source
-
Добавьте пользователя только для чтения, который может читать таблицу source (
db.tableв этом примере) -
Скопируйте определение таблицы
Продублируйте структуру таблицы в сервисе destination
В сервисе destination создайте базу данных, если её ещё нет:
-
Создайте базу данных destination:
-
Используя оператор CREATE TABLE из source, создайте таблицу в destination.
В сервисе destination создайте таблицу, используя вывод
select create_table_query...из source:
Разрешите удалённый доступ к сервису source
Чтобы забирать данные из source в destination, сервис source должен разрешать подключения. Временно отключите функциональность "IP Access List" на сервисе source.
Если вы планируете продолжать использовать сервис ClickHouse Cloud source, то предварительно экспортируйте существующий IP Access List в JSON-файл перед переключением на доступ отовсюду; это позволит импортировать список доступа после завершения миграции данных.
Измените allow list и временно разрешите доступ из Anywhere. Подробности см. в документации по IP Access List.
Скопируйте данные из source в destination
-
Используйте функцию
remoteSecureдля получения данных из сервиса ClickHouse Cloud source. Подключитесь к destination. Выполните эту команду в сервисе ClickHouse Cloud destination: -
Проверьте данные в сервисе destination
Восстановите IP Access List на сервисе source
Если вы ранее экспортировали список доступа, то можете повторно импортировать его с помощью Share, иначе заново добавьте свои записи в список доступа.
Удалите пользователя только для чтения exporter
- Измените список IP‑адресов доступа к сервису, чтобы ограничить доступ