Миграция исторических данных из Postgres/Mysql БД в ClickHouse
Clickhouse имеет встроенные движки для популярных баз данных которые можно использовать для импорта данных.
Миграцию можно выполнить через выполнение SQL команд на Clickhouse сервер, ниспользуя утилиту clickhouse-client
.
Мигрировать необходимо 6 основных таблиц:
-
четыре таблицы истории:
history
history_uint
history_str
history_text
-
две таблицы трендов
trends
trends_uint
Примечание
В Glaber в ClickHouse и текстовые и строковые данные хранятся в единой таблице history_str
Ниже приведена последовательность команд для миграции с Postgres в СLI clickhosue:
clickhouse-client --password glaber
Примечание
В последовательности SQL команд исправьте данные для подключения к серверу Postgtes: имя пользователя и пароль, название базы и именование схемы.
Сначала нужно подключить текущую SQL базу в PostgreSQL к Clickhouse:
create database zabbix_history ENGINE = PostgreSQL('localhost:5432','zabbix_db_name', 'zabbix_db_user', 'zabbix_db_password', 'zabbix_db_schema');
mysql
команды будут аналогичными, но дополнительно нужно будет поменять название движка БД на MySQL
, поле схемы указывать не нужною.
Далаее нужно залить 7 основных таблиц с историей Zabbix в 6 таблиц в базе Glaber
INSERT INTO glaber.history_dbl SELECT
toDate(clock) AS day,
itemid,
clock,
'',
'',
ns,
value
FROM zabbix_history.history;
INSERT INTO glaber.history_uint SELECT
toDate(clock) AS day,
itemid,
clock,
'',
'',
ns,
value
FROM zabbix_history.history_uint;
INSERT INTO glaber.history_str SELECT
toDate(clock) AS day,
itemid,
clock,
'',
'',
ns,
value
FROM zabbix_history.history_str;
INSERT INTO glaber.history_str SELECT
toDate(clock) AS day,
itemid,
clock,
'',
'',
ns,
value
FROM zabbix_history.history_text;
INSERT INTO glaber.history_log SELECT
toDate(clock) AS day,
itemid,
clock,
logeventid,
source,
severity,
'',
'',
ns,
value
FROM zabbix_history.history;
INSERT INTO glaber.trends_dbl SELECT
toDate(clock) AS day,
itemid,
clock,
value_min,
value_max,
value_avg,
num,
'',
''
FROM zabbix_history.trends;
INSERT INTO glaber.trends_uint SELECT
toDate(clock) AS day,
itemid,
clock,
value_min,
value_max,
value_avg,
num,
'',
''
FROM zabbix_history.trends_uint;
После заливки данных отключить базу PostgreSQL/MySQL:
drop database zabbix_history;
Примечание
Эта команда удалит только метаданные в Clickhouse o базе данных в PostgreSQL, отключит ее от Clickhouse. Сама база данных в PostgreSQL останется целой и никак изменена не будет.
Примечание
Метод работает для систем на базе PostgreSQL 12 и новее.
P.S: Инструкция составлена на основе данных, предоставленным пользователем @weduser.