В данном примере будет рассмотрен конкретный случай копирования данных с одного кластера Clickhouse на другой. С некоторыми модификациями, вы можете адаптировать сценарий под себя.
Мы будем выполнять задачу с помощью скрипта bash.
Работа скрипта и требования к запуску
Скрипт для импорта данных
Описание строк кода
Запуск скрипта
Как определить окончание процесса импорта
Дополнительные материалы
Как будет работать скрипт
Запускать данных сценарий необходимо на одной из нод кластера, куда будут импортироваться данные. Он будет выполнять удаленное подключения к источнику данных, читать список таблиц и создавать их на целевом кластере, а после переносить данные с помощью запросов INSERT + SELECT * FROM remote() .
В самом скрипте мы не будем хранить конкретных данных для подключения и указания источника. Все это будем передавать с аргументами.
Условия:
- Использование таблиц типа Distributed. Именно они будет использоваться для перекачки данных.
- В момент работы скрипта необходимо, чтобы с данными не происходило никаких изменений. Это важно для сохранения целостности информации.
- Оба кластера должны быть настроены одинаково. А именно, иметь одинаковые названия, иметь то же число шард и реплик. Это важно, так как подразумевается использование таблиц типа Distributed, в которых хранятся настройки размещения данных между участниками кластера. С модификацией данных параметров вы можете изменить под себя перенос данных.
Предварительно необходимо:
- Выбрать два сервера. Один на стороне кластера источника данных, второй — целевого, куда будем отправлять данные. Назовем их сервер-источник и сервер-цель.
- С сервера-цели необходимо обеспечить сетевое подключение для клиента Clickhouse к серверу-источнику. При необходимости, создать учетную запись с соответствующими правами. Ссылки на дополнительные материалы приведены ниже.
- На самом сервере-целе, где будет запускаться скрипт, настроить возможность беспарольного подключения к локальному серверу Clickhouse (поведение по умолчанию для системной записи root).
Ниже данные вопросы рассмотрим подробнее.
Пример скрипта
Напомним, что скрипт должен запускаться на сервере, куда будут импортироваться данные. Поэтому хорошей идеей будет создать сам скрипт на нем.
Создадим каталог, где будем хранить скрипт:
mkdir /scripts
Создадим bash-сценарий для копирования данных Clickhiuse:
vi /scripts/clickhouse-import-data.sh
- #!/bin/bash
- PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
- while getopts :d::h::p::u::c: arg
- do
- case ${arg} in
- d)
- db=»${OPTARG}»
- ;;
- h)
- db_host=»${OPTARG}»
- ;;
- p)
- db_port=»${OPTARG}»
- ;;
- u)
- db_user=»${OPTARG}»
- ;;
- c)
- db_cluster=»${OPTARG}»
- ;;
- 🙂
- echo -e «