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

Миграция с самоуправляемого ClickHouse в ClickHouse Cloud

Независимо от того, разбита ли ваша исходная таблица на сегменты и/или реплицируется ли она, в ClickHouse Cloud вам нужно только создать целевую таблицу (параметр Engine для этой таблицы можно не указывать — SharedMergeTree будет автоматически выбран в качестве движка таблицы), а ClickHouse Cloud автоматически позаботится о вертикальном и горизонтальном масштабировании. Вам не нужно думать о том, как реплицировать таблицу и разбивать ее на сегменты. В этом примере самоуправляемый сервер ClickHouse является источником, а сервис ClickHouse Cloud — пунктом назначения.

Обзор

Процесс выглядит следующим образом:
  1. Добавьте в исходный сервис пользователя только для чтения
  2. Продублируйте структуру исходной таблицы в целевом сервисе
  3. Перенесите данные из источника в целевой сервис методом Pull или Push — в зависимости от сетевой доступности источника
  4. Удалите исходный сервер из IP Access List целевого сервиса (если применимо)
  5. Удалите из исходного сервиса пользователя только для чтения

Миграция таблиц из одной системы в другую:

В этом примере показана миграция одной таблицы с самоуправляемого сервера ClickHouse в ClickHouse Cloud.
СовместимостьЕсли вы замечаете различия в поведении между самоуправляемым развертыванием ClickHouse и сервисом ClickHouse Cloud, это может быть связано с настройкой совместимости. В 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 измените ENGINE на ReplicatedMergeTree без каких-либо параметров. В ClickHouse Cloud таблицы всегда реплицируются, и правильные параметры подставляются автоматически. При этом сохраните секции ORDER BY, PRIMARY KEY, PARTITION BY, SAMPLE BY, TTL и SETTINGS.
CREATE TABLE db.table ...
  • Используйте функцию remoteSecure, чтобы pull данные из самоуправляемого источника
INSERT INTO db.table SELECT * FROM
remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
Если исходная система недоступна из внешних сетей, данные можно не pull, а push, так как функция remoteSecure работает и для выборок, и для вставки. См. следующий вариант.
  • Используйте функцию remoteSecure, чтобы push данные в сервис ClickHouse Cloud
Добавьте удалённую систему в IP Access List сервиса ClickHouse CloudЧтобы функция remoteSecure могла подключиться к вашему сервису ClickHouse Cloud, IP-адрес удалённой системы должен быть разрешён в IP Access List. Разверните раздел Manage your 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, так как в этом случае используется пользователь только для чтения. Миграция состоит из нескольких шагов:
  1. Определите один сервис ClickHouse Cloud как источник, а другой — как пункт назначения
  2. Добавьте пользователя только для чтения в сервис-источник
  3. Продублируйте структуру исходной таблицы в целевом сервисе
  4. Временно разрешите доступ по IP к сервису-источнику
  5. Скопируйте данные из источника в пункт назначения
  6. Снова настройте IP Access List для пункта назначения
  7. Удалите пользователя только для чтения из сервиса-источника

Добавьте в исходный сервис пользователя с правом только на чтение

  • Добавьте пользователя с правом только на чтение, которому будет доступно чтение исходной таблицы (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 на сервисе-источнике.
Если вы планируете и дальше использовать исходный сервис ClickHouse Cloud, экспортируйте текущий IP Access List в JSON‑файл, прежде чем открывать доступ отовсюду; это позволит затем импортировать список доступа обратно после переноса данных.
Измените список разрешённых и временно выберите доступ 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 сервиса, чтобы ограничить доступ
Последнее изменение 10 июня 2026 г.