Миграцию можно выполнить через выполнение SQL команд на Clickhouse сервер, ниспользуя утилиту clickhouse-client.
Мигрировать необходимо 6 основных таблиц: четыре таблицы истории:
две таблицы трендов
В Glaber в ClickHouse и текстовые и строковые данные хранятся в единой таблице history_str
Для mysql команды будут аналогичными, но дополнительно нужно будет поменять название движка БД на MySQL.
В последовательности SQL команд исправьте данные для подключения к серверу Postgtes: имя пользователя и пароль, название базы и именование схемы.
clickhouse-client --password glaber
Если схема не была импортирована!
Создаем базу данных таблицы и таблицы, запросы можно найти в проекте в databases/clickhouse
https://gitlab.com/mikler/glaber/-/blob/master/database/clickhouse/history.sql
clickhouse-client --password --multiquery < history.sql
В содержимое history.sql вставить это:
CREATE DATABASE glaber; CREATE TABLE glaber.history_dbl ( day Date, itemid UInt64, clock DateTime, hostname String, itemname String, ns UInt32, value Float64 ) ENGINE = MergeTree() PARTITION BY toYYYYMM(day) ORDER BY (itemid, clock) TTL day + INTERVAL 6 MONTH; -- CREATE TABLE glaber.history_uint ( day Date, itemid UInt64, clock DateTime, hostname String, itemname String, ns UInt32, value UInt64 ) ENGINE = MergeTree() PARTITION BY toYYYYMM(day) ORDER BY (itemid, clock) TTL day + INTERVAL 6 MONTH; CREATE TABLE glaber.history_str ( day Date, itemid UInt64, clock DateTime, hostname String, itemname String, ns UInt32, value String ) ENGINE = MergeTree() PARTITION BY toYYYYMM(day) ORDER BY (itemid, clock) TTL day + INTERVAL 6 MONTH; -- CREATE TABLE glaber.history_log ( day Date, itemid UInt64, clock DateTime, logeventid UInt64, source String, severity Int16, hostname String, itemname String, ns UInt32, value String ) ENGINE = MergeTree() PARTITION BY toYYYYMM(day) ORDER BY (itemid, clock) TTL day + INTERVAL 6 MONTH; -- CREATE TABLE glaber.trends_dbl ( day Date, itemid UInt64, clock DateTime, value_min Float64, value_max Float64, value_avg Float64, count UInt32, hostname String, itemname String ) ENGINE = MergeTree PARTITION BY toYYYYMM(day) ORDER BY (itemid, clock) TTL day + toIntervalMonth(24) SETTINGS index_granularity = 8192; -- CREATE TABLE glaber.trends_uint ( day Date, itemid UInt64, clock DateTime, value_min Int64, value_max Int64, value_avg Int64, count UInt32, hostname String, itemname String ) ENGINE = MergeTree PARTITION BY toYYYYMM(day) ORDER BY (itemid, clock) TTL day + toIntervalMonth(24) SETTINGS index_granularity = 8192;
Отредактировать строку запроса FROM PostgreSQL
INSERT INTO glaber.history_dbl SELECT toDate(clock) AS day, itemid, clock, '', '', ns, value FROM PostgreSQL('host:port', 'database', 'history', 'user', 'password', 'schema')
INSERT INTO glaber.history_uint SELECT toDate(clock) AS day, itemid, clock, '', '', ns, value FROM PostgreSQL('host:port', 'database', 'history_uint', 'user', 'password', 'schema')
INSERT INTO glaber.history_str SELECT toDate(clock) AS day, itemid, clock, '', '', ns, value FROM PostgreSQL('localhost:5432', 'zabbix', 'history_str', 'zabbix', 'zabbix')
INSERT INTO glaber.history_str SELECT toDate(clock) AS day, itemid, clock, '', '', ns, value FROM PostgreSQL('host:port', 'database', 'history_text', 'user', 'password', 'schema')
INSERT INTO glaber.history_log SELECT toDate(clock) AS day, itemid, clock, logeventid, source, severity, '', '', ns, value FROM PostgreSQL('host:port', 'database', 'history_log', 'user', 'password', 'schema')
INSERT INTO glaber.trends_dbl SELECT toDate(clock) AS day, itemid, clock, value_min, value_max, value_avg, num, '', '' FROM PostgreSQL('host:port', 'database', 'trends', 'user', 'password', 'schema')
INSERT INTO glaber.trends_uint SELECT toDate(clock) AS day, itemid, clock, value_min, value_max, value_avg, num, '', '' FROM PostgreSQL('host:port', 'database', 'trends_uint', 'user', 'password', 'schema')
Отредактировать строку запроса FROM MySQL
INSERT INTO glaber.history_dbl SELECT toDate(clock) AS day, itemid, clock, '', '', ns, value FROM MySQL('host:port', 'database', 'history', 'user', 'password', 'schema')
INSERT INTO glaber.history_uint SELECT toDate(clock) AS day, itemid, clock, '', '', ns, value FROM MySQL('host:port', 'database', 'history_uint', 'user', 'password', 'schema')
INSERT INTO glaber.history_str SELECT toDate(clock) AS day, itemid, clock, '', '', ns, value FROM MySQL('localhost:5432', 'zabbix', 'history_str', 'zabbix', 'zabbix')
INSERT INTO glaber.history_str SELECT toDate(clock) AS day, itemid, clock, '', '', ns, value FROM MySQL('host:port', 'database', 'history_text', 'user', 'password', 'schema')
INSERT INTO glaber.history_log SELECT toDate(clock) AS day, itemid, clock, logeventid, source, severity, '', '', ns, value FROM MySQL('host:port', 'database', 'history_log', 'user', 'password', 'schema')
INSERT INTO glaber.trends_dbl SELECT toDate(clock) AS day, itemid, clock, value_min, value_max, value_avg, num, '', '' FROM MySQL('host:port', 'database', 'trends', 'user', 'password', 'schema')
INSERT INTO glaber.trends_uint SELECT toDate(clock) AS day, itemid, clock, value_min, value_max, value_avg, num, '', '' FROM MySQL('host:port', 'database', 'trends_uint', 'user', 'password', 'schema')