Инструкция по миграции истории в ClickHouse
Шаг 1. Установить СУБД ClickHouse, следуя официальным инструкциям.
Минимальная требуемая версия для работы платформы >21.4.6.
Шаг 2. С оздать нового пользователя /etc/clickhouse-server/users.d/altcraft.xml (подробнее см. в документации — Настройки пользователей).
<yandex>
<users>
<altcraft>
<password>abcdefghiasdwqedwqjklmnopqrstuvwxyzABCDEF</password>
<networks>
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
<allow_databases>
<database>altcraft_system</database>
</allow_databases>
</altcraft>
</users>
</yandex>
В качестве пароля используется набор из символов "abcdefghiasdwqedwqjklmnopqrstuvwxyzABCDEF".
Обязательно сгенерируйте более сложный пароль, состоящий из не менее 32-х символов.
Шаг 3. Включить опцию input_format_import_nested_json для вставки данных JSON с вложенными объектами (подробнее см. в документации — Профили настроек).
<?xml version="1.0"?>
<yandex>
<!-- Profiles of settings. -->
<profiles>
<!-- Default settings. -->
<default>
<!-- Maximum memory usage for processing single query, in bytes. -->
<max_memory_usage>8589934592</max_memory_usage>
<max_memory_usage_for_user>8589934592</max_memory_usage_for_user>
<max_bytes_before_external_group_by>4294967296</max_bytes_before_external_group_by>
<max_bytes_before_external_sort>4294967296</max_bytes_before_external_sort>
<receive_timeout>3600</receive_timeout>
<send_timeout>3600</send_timeout>
<max_threads>2</max_threads>
<max_partitions_per_insert_block>10000</max_partitions_per_insert_block>
<!-- Use cache of uncompressed blocks of data. Meaningful only for processing many of very short queries. -->
<use_uncompressed_cache>0</use_uncompressed_cache>
<!-- How to choose between replicas during distributed query processing.
random - choose random replica from set of replicas with minimum number of errors
nearest_hostname - from set of replicas with minimum number of errors, choose replica
with minimum number of different symbols between replica's hostname and local hostname
(Hamming distance).
in_order - first live replica is chosen in specified order.
first_or_random - if first replica one has higher number of errors, pick a random one from replicas with minimum number of errors.
-->
<load_balancing>random</load_balancing>
<input_format_import_nested_json>1</input_format_import_nested_json>
</default>
Шаг 4. В главном файле конфигурации main.json настроить параметры для подключения и работы с СУБД ClickHouse.
"CLICKHOUSE_SYSTEM": {
"HOST": "localhost",
"PORT": 9000,
"USER": "altcraft",
"MAX_CONNECTION": 100,
"CONN_TIMEOUT": 15,
"PASSWORD": "abcdefghiasdwqedwqjklmnopqrstuvwxyzABCDEF",
"IS_DEBUG": false
},
Шаг 5. Запустить миграцию. Для этих целей подготовлена специальная утилита — actions_migrate. Полный список доступных параметров:
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
| --accounts string | Все активные аккаунты | Список аккаунтов для импорта с разделителем через запятую Пример: "1, 2, 3" |
| --appname bool | false | Показать дополнительную информацию об утилите |
| --batch_timeout int | 5 | Время в секундах, по истечению которого будет выполнена вставка |
| --ch_batch int | 100000 | Минимальный батч событий для вставки |
| --ch_debug bool | false | Включить дополнительный уровень логирования |
| --ch_host string | Используется главная конфигурация main.json | Хост для подключения |
| --ch_password string | Используется главная конфигурация main.json | Пароль для подключения |
| --ch_port int | Используется главная конфигурация main.json | Порт для подключения |
| --ch_user string | Используется главная конфигурация main.json | Пользователь для подключения |
| --config string | /opt/MarketingPlatform/config/main.json | Путь до файла главной конфигурации main.json |
| --exclude string | "" | Список аккаунтов для исключения из импорта с разделителем через запятую Пример: "1, 2, 3" |
| --level_log string | INFO | Уровень логирования: TRACE, DEBUG, INFO, WARN, ERROR, CRITICAL, FATAL |
| --log_path string | ./actions_migrate.log | Месторасположение лог-файла |
| --range string | "" | Временной диапазон для выборки существующей истории Формат — "MM.YY-MM.YY", "-MM.YY", "MM.YY-" |
| --version bool | false | Показать версию утилиты |
| --worker_size int | -1 | Количество воркеров (по умолчанию соответствует количеству vCPU). |
Миграция может занять продолжительное время, до 3-х и более дней. Для продолжения миграции после отключения от сервера можно воспользоваться утилитой screen для работы в отдельной сессии, пример использования screen — https://access.redhat.com/articles/5247.
Пример переноса всех исторических данных по сентябрь 2021 года:
/opt/akd/ak/bin/actions_migrate --accounts "1" --config "/opt/akd/config/main.json" --batch_timeout 60 --ch_batch 500000 --range "-09.21"
Пример переноса всех исторических данных за ноябрь 2021 года:
/opt/akd/ak/bin/actions_migrate --accounts "1" --config "/opt/akd/config/main.json" --batch_timeout 60 --ch_batch 500000 --range "11.21-11.21"
Пример переноса всех исторических данных с января 2021 года по текущий момент:
/opt/akd/ak/bin/actions_migrate --accounts "1" --config "/opt/akd/config/main.json" --batch_timeout 60 --ch_batch 500000 --range "01.21-"