Перенести данные из ClickHouse® в облачную базу данных ClickHouse® с помощью Trino
Вы можете перенести таблицы из одной или нескольких баз данных ClickHouse® в облачную базу данных ClickHouse® с помощью облака для Trino. Такой способ подходит, если нужно перенести отдельные таблицы, отфильтровать или преобразовать данные при переносе.
Сервер с исходной базой данных и кластер ClickHouse® с целевой базой данных подключаются к облаку для Trino как два каталога с помощью коннектора ClickHouse. Каждая база данных отображается в каталоге как схема. Trino читает данные из исходной базы данных и записывает их в целевую в одном SQL-запросе, без промежуточных файлов и выгрузок.
При переносе данных с помощью Trino действуют ограничения.
Ограничения
Перенести данные
- Подготовьте сервер с исходной базой данных ClickHouse®.
- Подготовьте целевой кластер ClickHouse®.
- Создайте кластер Trino с каталогами.
- Подключитесь к кластеру Trino.
- Проверьте каталоги.
- Перенесите данные с помощью Trino.
- Проверьте результат.
- Переключите сервисы.
1. Подготовить сервер с исходной базой данных ClickHouse®
Чтобы защитить данные от изменения в исходной базе данных, Trino будет подключаться к ней от имени отдельного пользователя с правами только на чтение.
-
Подключитесь к исходной базе данных ClickHouse® от имени пользователя, у которого есть права на управление пользователями.
-
Создайте нового пользователя и выдайте ему права только на чтение с помощью привилегии
SELECT:CREATE USER <user_name> IDENTIFIED WITH sha256_password BY '<password>';GRANT SELECT ON <source_database>.* TO <user_name>;Укажите:
<user_name>— имя пользователя;<password>— пароль пользователя;<source_database>— имя базы данных, из которой нужно перенести данные.
Если вам нужно перенести данные из нескольких баз данных, выдайте привилегию
SELECTна каждую. -
Убедитесь, что сервер доступен из интернета по публичному IP-адресу или DNS-адресу.
-
Убедитесь, что на сервере включен HTTP-интерфейс ClickHouse®: в конфигурации задан параметр
https_port(обычно порт 8443) и настроен TLS-сертификат. Trino подключается к ClickHouse® через HTTP-интерфейс. -
Если на сервере используется фильтрация трафика, разрешите входящие подключения на HTTPS-порт ClickHouse® в файрволе или группах безопасности облачного провайдера.
2. Подготовить целевой кластер ClickHouse®
Облако для Trino доступно только в пуле ru-7. Если вы хотите перенести данные из Trino в облачную базу данных ClickHouse® через приватную подсеть, создайте кластер ClickHouse® в пуле ru-7 и используйте одну подсеть для кластеров ClickHouse® и Trino.
Если кластеры ClickHouse® и Trino будут находиться в разных пулах, Trino сможет подключаться к ClickHouse® только через интернет по публичному IP-адресу.
-
Создайте кластер ClickHouse®. При создании кластера:
-
если хотите перенести данные через приватную подсеть, выберите локацию — пул ru-7;
-
в блоке Конфигурация групп нод выберите конфигурацию с размером диска, достаточным для объема переносимых данных.
-
-
Если хотите перенести данные через интернет, подключите публичный IP-адрес к шарду кластера. Публичные IP-адреса подключаются ко всем нодам шарда одновременно — для каждой ноды отдельный адрес.
3. Создать кластер Trino с каталогами
Используйте инструкцию Создать кластер Trino. При создании кластера:
-
в блоке Сеть:
-
если целевой кластер ClickHouse® создан в пуле ru-7, выберите подсеть целевого кластера;
-
чтобы подключаться к Trino из интернета, отметьте чекбокс Внешний доступ к графическому интерфейсу;
-
-
в блоке Каталоги добавьте два каталога с типом коннектора ClickHouse для исходной и целевой баз данных. При добавлении каталогов используйте параметры подключения:
4. Подключиться к кластеру Trino
Вы можете подключиться к кластеру через графический интерфейс Trino, консольный клиент Trino CLI и DBeaver.
Графический интерфейс Trino
Trino CLI
DBeaver
-
В панели управления в верхнем меню нажмите Продукты и выберите Trino.
-
В карточке кластера в столбце GUI нажмите .
-
Введите логин —
admin. -
Введите пароль администратора — задается при создании кластера. После создания кластера пароль нельзя посмотреть в панели управления, но можно изменить.
-
Нажмите Log In.
5. Проверить каталоги
Выведите список каталогов, схем и таблиц исходной базы данных и схем целевой базы данных:
SHOW CATALOGS;
SHOW SCHEMAS FROM <source_catalog>;
SHOW TABLES FROM <source_catalog>.<source_database>;
SHOW SCHEMAS FROM <target_catalog>;
Укажите:
<source_catalog>— имя каталога сервера с исходной базой данных;<source_database>— имя исходной базы данных;<target_catalog>— имя каталога целевого кластера.
В списке каталогов должны быть оба созданных каталога, а в схеме <source_catalog>.<source_database> — таблицы исходной базы данных.
6. Перенести данные с помощью Trino
Trino создает таблицы ClickHouse® только с движками Log и MergeTree и без части настроек исходной таблицы.
Поэтому сначала нужно создать в целевом кластере таблицы с той же структурой, что в исходной, а затем перенести в них данные.
Мы рекомендуем выполнять стандартные SQL-запросы к целевому кластеру через процедуру system.execute — в таком случае не нужен отдельный доступ к кластеру.
-
Создайте базу данных в целевом кластере:
CALL <target_catalog>.system.execute(query => 'CREATE DATABASE IF NOT EXISTS <target_database>');Укажите:
<target_catalog>— имя каталога целевого кластера;<target_database>— имя целевой базы данных.
-
Получите определение со структурой исходной таблицы:
SHOW CREATE TABLE <source_database>.<source_table>;Укажите:
<source_database>— имя исходной базы данных;<source_table>— имя исходной таблицы.
Скопируйте результат запроса.
-
Создайте таблицу в целевом кластере:
CALL <target_catalog>.system.execute(query => '<create_table_query>');Укажите:
<target_catalog>— имя каталога целевого кластера;<create_table_query>— определение со структурой исходной таблицы, которое вы получили и скопировали на шаге 2.
Если в структуре таблицы есть одинарные кавычки (например, в значениях
DEFAULTили в типеEnum), измените их на двойные:''. Удалите из структуры настройки, которых нет в целевом кластере, напримерstorage_policy. Если в шарде целевого кластера несколько нод, используйте реплицируемый движокReplicatedMergeTree. -
Опционально: чтобы ускорить перенос данных, отключите запись через временную таблицу:
SET SESSION <target_catalog>.non_transactional_insert = true;Укажите
<target_catalog>— имя каталога целевого кластера. -
Перенесите данные:
INSERT INTO <target_catalog>.<target_database>.<target_table>SELECT * FROM <source_catalog>.<source_database>.<source_table>;Укажите:
<target_catalog>— имя каталога целевого кластера;<target_database>— имя целевой базы данных;<target_table>— имя целевой таблицы;<source_catalog>— имя каталога сервера с исходной базой данных;<source_database>— имя исходной базы данных;<source_table>— имя исходной таблицы.
В выводе появится количество записанных строк.
-
Если на шаге 4 вы отключили запись через временную таблицу и при записи данных в целевую таблицу возникла ошибка, в ней останется только часть строк. Чтобы заново перенести все данные:
6.1. Очистите целевую таблицу:
TRUNCATE TABLE <target_catalog>.<target_database>.<target_table>;Укажите:
<target_catalog>— имя каталога целевого кластера;<target_database>— имя целевой базы данных;<target_table>— имя целевой таблицы.
6.2. Повторите шаг 5.
-
Повторите шаги 2–6 для каждой таблицы.
7. Проверить результат
-
Сравните количество строк в исходной и целевой таблицах:
SELECT(SELECT count(*) FROM <source_catalog>.<source_database>.<source_table>) AS source_rows,(SELECT count(*) FROM <target_catalog>.<target_database>.<target_table>) AS target_rows;Укажите:
<source_catalog>— имя каталога сервера с исходной базой данных;<source_database>— имя исходной базы данных;<source_table>— имя исходной таблицы;<target_catalog>— имя каталога целевого кластера;<target_database>— имя целевой базы данных;<target_table>— имя целевой таблицы.
-
Найдите дни, за которые количество строк не совпадает:
SELECT <column>, count(*) AS rows FROM <source_catalog>.<source_database>.<source_table> GROUP BY <column>EXCEPTSELECT <column>, count(*) AS rows FROM <target_catalog>.<target_database>.<target_table> GROUP BY <column>;Укажите:
<column>— столбец с датой, по которому сверяется количество строк;<source_catalog>— имя каталога сервера с исходной базой данных;<source_database>— имя исходной базы данных;<source_table>— имя исходной таблицы;<target_catalog>— имя каталога целевого кластера;<target_database>— имя целевой базы данных;<target_table>— имя целевой таблицы.
Пустой вывод означает, что количество строк совпадает за все дни.
-
Выведите список столбцов целевой таблицы:
SHOW COLUMNS FROM <target_catalog>.<target_database>.<target_table>;Укажите:
<target_catalog>— имя каталога целевого кластера;<target_database>— имя целевой базы данных;<target_table>— имя целевой таблицы.
-
Сверьте столбцы целевой таблицы, которые вы получили на шаге 3, со структурой исходной таблицы, которую вы получили при переносе данных на шаге 2.
8. Переключить сервисы
-
Переключите сервисы на целевой кластер — подробнее в инструкции Подключиться к кластеру ClickHouse®.
-
Если в кластере ClickHouse® вы подключали публичный IP-адрес и он больше не нужен, отключите его.
-
Если кластер Trino больше не нужен, удалите его.
-
Если сервер с исходной базой данных ClickHouse® больше не нужен, удалите его.
ClickHouse® является зарегистрированным товарным знаком ClickHouse®, Inc. https://clickhouse.com.