Миграцию можно выполнить через выполнение 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')