Skip to content

Миграция исторических данных из 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.