# Перенос данных в ClickHouse

В некоторых случаях возможно возникновение такой ситуации, что в БД **ClickHouse**, откуда берутся данные для работы **Статистики v2**, по тем или иным причинам отсутствуют данные за какие-либо промежутки времени. Для исправления этой проблемы, начиная с версии **Webim** [10.6](https://webim.ru/webim-10-6/), доступна возможность вручную запустить перенос статистических данных из БД (схемы в случае **PostgreSQL**) `pro` в БД **ClickHouse** с помощью скрипта `populate_clickhouse.sh`.

## Порядок действий для переноса данных

  1. Определитесь с временным промежутком, за который вам необходимо перенести данные. Для этого ниже предоставлены некоторые рекомендации:

    !!! Warning "Внимание!"
        На границах временных промежутков могут проявляться "артефакты" переноса, так что мы рекомендуем закладывать дополнительные сутки по обоим краям промежутка.

    * В случае, если у Вас имеется один большой пробел с отсутствующими данными, временной промежуток стоит ограничить только им.

    * В случае, если у Вас имеется несколько больших пробелов в данных, разделённых малыми промежутками (например, 2-3 дня), в которых данные присутствуют, включите во временной промежуток весь период от начала первого пробела до конца последнего.

    * В случае, если у Вас имеется несколько больших пробелов в данных, разделённых средними по размеру промежутками (не более недели в масштабах месяца), в которых данные присутствуют, вы можете как задать в качестве временного промежутка весь период от начала первого пробела до конца последнего, так и обрабатывать каждый пробел как отдельный временной промежуток.

    * В случае, если у Вас имеется несколько больших пробелов в данных, разделённых большими промежутками, в которых данные присутствуют, мы рекомендуем обрабатывать каждый пробел как отдельный временной промежуток.

    * В случае небольшого промежутка (меньше суток) поврежденных данных Вы можете определить промежуток как с учётом данной выше рекомендации о дополнительных сутках по краям промежутков, так и без него.

      ![Сценарии использования при заполнении ClickHouse](https://webim.ru/kb/img/devops/populate-clickhouse/use-cases.webp){ style="width: 780px; max-width: 100%" }

  1. Перейдите в виртуальное окружение **Chat Backend**.

  1. Запустите скрипт `populate_clickhouse.sh`.

    Синтаксис:

    ```
    populate_clickhouse.sh [-v] -a=account_name -df=dd-mm-yyyy -dt=dd-mm-yyyy
    ```

    Значения параметров приведены ниже:

      * `-v` | `--verbose` - вывод дополнительной информации о процессе переноса данных в терминал

      * `-a` | `--account` - имя аккаунта в **Webim**, обязательно

      * `-df` | `--dtmfrom` - начало периода, за который переносятся данные, обязательно

      * `-dt` | `--dtmto` - конец периода, за который переносятся данные, обязательно

    !!! Note "N.B."
        Получившийся временной период не будет включать в себя день, указанный в параметре `-dt`, т.е. концом периода, за который будут перенесены данные, будет считаться `23:59:59` предыдущего дня.

Также стоит отметить, что длительность выполнения переноса данных зависит от количества данных в БД `pro` за указанный во временном промежутке период и текущей нагрузке на неё. В случае особо больших промежутков и/или особо большого количества данных в БД `pro` в указанном промежутке, а также сильной нагрузки на неё в момент переноса, перенос данных может затянуться на многие часы, так что к выбору временного промежутка необходимо подходить с умом.

---

Источник: https://webim.ru/kb/devops/populate-clickhouse.html
