Инструменты пользователя

Инструменты сайта


flip:glaber:database_migration_to_clickhouse_for_glaber

Миграция базы данных в ClickHouse для Glaber

Миграцию можно выполнить через выполнение SQL команд на Clickhouse сервер, ниспользуя утилиту clickhouse-client.

Мигрировать необходимо 6 основных таблиц: четыре таблицы истории:

  • history
  • history_uint
  • history_str
  • history_text

две таблицы трендов

  • trends
  • trends_uint

В Glaber в ClickHouse и текстовые и строковые данные хранятся в единой таблице history_str

Для mysql команды будут аналогичными, но дополнительно нужно будет поменять название движка БД на MySQL.

В последовательности SQL команд исправьте данные для подключения к серверу Postgtes: имя пользователя и пароль, название базы и именование схемы.

Подключение к ClickHouse

clickhouse-client --password glaber

Схема БД для ClickHouse

Если схема не была импортирована!

Создаем базу данных таблицы и таблицы, запросы можно найти в проекте в 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;

Миграция с PostgreSQL

Отредактировать строку запроса 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')

Миграция с MySQL

Отредактировать строку запроса 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')

Источники

flip/glaber/database_migration_to_clickhouse_for_glaber.txt · Последнее изменение: 2024/10/25 13:28 — flip

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki