Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Data Transfer
  • Доступные трансферы
  • Начало работы
    • Все инструкции
    • Подготовка к трансферу
      • Управление эндпоинтами
      • Миграция эндпоинтов в другую зону доступности
        • Источник
        • Приемник
    • Управление трансфером
    • Работа с базами данных во время трансфера
    • Мониторинг состояния трансфера
  • Решение проблем
  • Управление доступом
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • Обучающие курсы

В этой статье:

  • Сценарии передачи данных в ClickHouse®
  • Настройка источника данных
  • Подготовка базы данных приемника
  • Настройка эндпоинта-приемника ClickHouse®
  • Кластер Managed Service for ClickHouse®
  • Пользовательская инсталляция
  • Дополнительные настройки
  • Рекомендации по настройке эндпоинтов
  • Решение проблем, возникающих при переносе данных
  • Не добавляются новые таблицы
  • Не переносятся данные
  • Неподдерживаемый диапазон дат
  • Нехватка ресурсов или растущая задержка передачи данных
  • Превышение количества блоков данных
  1. Пошаговые инструкции
  2. Настройка эндпоинтов
  3. ClickHouse
  4. Приемник

Передача данных в эндпоинт-приемник ClickHouse®

Статья создана
Yandex Cloud
Улучшена
Alexey K.
Обновлена 10 апреля 2025 г.
  • Сценарии передачи данных в ClickHouse®
  • Настройка источника данных
  • Подготовка базы данных приемника
  • Настройка эндпоинта-приемника ClickHouse®
    • Кластер Managed Service for ClickHouse®
    • Пользовательская инсталляция
    • Дополнительные настройки
  • Рекомендации по настройке эндпоинтов
  • Решение проблем, возникающих при переносе данных
    • Не добавляются новые таблицы
    • Не переносятся данные
    • Неподдерживаемый диапазон дат
    • Нехватка ресурсов или растущая задержка передачи данных
    • Превышение количества блоков данных

С помощью сервиса Yandex Data Transfer вы можете переносить данные в базу ClickHouse® и реализовывать различные сценарии переноса, обработки и трансформации данных. Для реализации трансфера:

  1. Ознакомьтесь с возможными сценариями передачи данных.
  2. Настройте один из поддерживаемых источников данных.
  3. Подготовьте базу данных ClickHouse® к трансферу.
  4. Настройте эндпоинт-приемник в Yandex Data Transfer.
  5. Создайте и запустите трансфер.
  6. Выполняйте необходимые действия по работе с базой и контролируйте трансфер.
  7. При возникновении проблем, воспользуйтесь готовыми решениями по их устранению.

Сценарии передачи данных в ClickHouse®Сценарии передачи данных в ClickHouse®

  1. Миграция — перенос данных из одного хранилища в другое. Часто это перенос базы из устаревших локальных баз в управляемые облачные.

    • Миграция кластера ClickHouse®;
    • Перераспределение данных по шардам.
    • Копирование данных из Managed Service for OpenSearch в Managed Service for ClickHouse® с помощью Yandex Data Transfer
  2. Поставка данных — процесс доставки произвольных данных в целевые хранилища. Процесс поставки включает извлечение данных из очереди и их десериализацию с последующей трансформацией данных в формат целевого хранилища.

    • Поставка данных из Apache Kafka® в ClickHouse®;
    • Поставка данных из YDS в ClickHouse®.
  3. Загрузка данных в витрины — процесс трансфера подготовленных данных в хранилища с целью последующей визуализации.

    • Загрузка данных Greenplum® в ClickHouse®;

    • Загрузка данных MySQL® в ClickHouse®;

    • Загрузка данных Яндекс Метрика в ClickHouse®;

    • Загрузка данных Яндекс Директ в ClickHouse®;

    • Загрузка данных PostgreSQL в ClickHouse®;

    • Загрузка данных из Object Storage в ClickHouse®;

    • Загрузка данных из YDB в витрину ClickHouse®.

Подробное описание возможных сценариев передачи данных в Yandex Data Transfer см. в разделе Практические руководства.

Настройка источника данныхНастройка источника данных

Настройте один из поддерживаемых источников данных:

  • PostgreSQL;
  • MySQL®;
  • ClickHouse®;
  • Greenplum®;
  • Apache Kafka®;
  • Airbyte®;
  • Яндекс Метрика;
  • YDS;
  • Yandex Object Storage;
  • Oracle;
  • Elasticsearch;
  • OpenSearch.

Полный список поддерживаемых источников и приемников в Yandex Data Transfer см. в разделе Доступные трансферы.

Примечание

В ClickHouse® есть ограничения на диапазон дат. Наличие в базе-источнике неподдерживаемых дат может привести к ошибке и остановке трансфера.

Подготовка базы данных приемникаПодготовка базы данных приемника

Managed Service for ClickHouse®
ClickHouse®
  1. Создайте базу-приемник.

    Если нужно перенести несколько баз данных, создайте для каждой из них отдельный трансфер.

  2. Создайте пользователя с доступом к базе приемника.

    После старта трансфер подключится к приемнику от имени этого пользователя.

  3. Если в кластере включено управление пользователями через SQL, выдайте созданному пользователю права:

    GRANT CLUSTER ON *.* TO <имя_пользователя>
    GRANT SELECT, INSERT, ALTER DELETE, CREATE TABLE, CREATE VIEW, DROP TABLE, TRUNCATE, dictGet ON <имя_базы_данных>.* TO <имя_пользователя>
    GRANT SELECT(macro, substitution) ON system.macros TO <имя_пользователя>
    

    Если управление пользователями через SQL выключено, права назначаются через консоль управления и CLI.

  4. Создайте группу безопасности и настройте ее.

  5. Назначьте кластеру Managed Service for ClickHouse® созданную группу безопасности.

  1. Если вы не планируете использовать для подключения к внешнему кластеру сервис Cloud Interconnect или VPN, разрешите подключения к такому кластеру из интернета с IP-адресов, используемых сервисом Data Transfer.

    Подробнее о настройке сети для работы с внешними ресурсами см. в концепции.

  2. Создайте базу-приемник. Ее имя должно совпадать с именем базы-источника. Если нужно перенести несколько баз данных, создайте для каждой из них отдельный трансфер.

  3. Создайте пользователя с доступом к базе приемника.

    После старта трансфер подключится к приемнику от имени этого пользователя.

  4. Выдайте созданному пользователю права:

    GRANT CLUSTER ON *.* TO <имя_пользователя>
    GRANT SELECT, INSERT, ALTER DELETE, CREATE TABLE, CREATE VIEW, DROP TABLE, TRUNCATE, dictGet ON <имя_базы_данных>.* TO <имя_пользователя>
    GRANT SELECT(macro, substitution) ON system.macros TO <имя_пользователя>
    

Настройка эндпоинта-приемника ClickHouse®Настройка эндпоинта-приемника ClickHouse®

При создании или изменении эндпоинта вы можете задать:

  • Настройки подключения к кластеру Yandex Managed Service for ClickHouse® или пользовательской инсталляции, в т. ч. на базе виртуальных машин Yandex Compute Cloud. Эти параметры обязательные.
  • Дополнительные параметры.

См. также рекомендации по настройке эндпоинта при поставке данных в ClickHouse® из очередей.

Кластер Managed Service for ClickHouse®Кластер Managed Service for ClickHouse®

Важно

Для создания или редактирования эндпоинта управляемой базы данных вам потребуется роль managed-clickhouse.viewer или примитивная роль viewer, выданная на каталог кластера этой управляемой базы данных.

Подключение к БД с указанием идентификатора кластера в Yandex Cloud.

Консоль управления
CLI
Terraform
API
  • Managed кластер — из списка выберите имя кластера, к которому необходимо подключиться.

  • Группа шардов — укажите группу шардов, в которую будут передаваться данные. Если значение не указано, данные будут размещены во всех шардах.

  • Пользователь — укажите имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • Пароль — укажите пароль пользователя для доступа к базе данных.

  • База данных — укажите имя базы данных в выбранном кластере.

  • Группы безопасности — выберите облачную сеть для размещения эндпоинта и группы безопасности для сетевого трафика. Это позволит применить указанные правила групп безопасности к ВМ и кластерам в выбранной сети без изменения их настроек. Подробнее см. в разделе Сеть в Yandex Data Transfer.

    Убедитесь, что выбранные группы безопасности настроены.

  • Тип эндпоинта — clickhouse-target.
  • --cluster-id — идентификатор кластера, к которому необходимо подключиться.

  • --cluster-name — группа шардов, в которую будут передаваться данные. Если параметр не указан, данные будут размещены во всех шардах.

  • --database — имя базы данных.

  • --user — имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • --security-group — группы безопасности для сетевого трафика, правила которых применятся к ВМ и кластерам без изменения их настроек. Подробнее см. в разделе Сеть в Yandex Data Transfer.

    Убедитесь, что указанные группы безопасности настроены.

  • Чтобы задать пароль пользователя для доступа к базе данных, используйте один из параметров:

    • --raw-password — пароль в текстовом виде.

    • --password-file — путь к файлу с паролем.

  • Тип эндпоинта — clickhouse_target.
  • connection.connection_options.mdb_cluster_id — идентификатор кластера, к которому необходимо подключиться.

  • clickhouse_cluster_name — группа шардов, в которую будут передаваться данные. Если параметр не указан, данные будут размещены во всех шардах.

  • subnet_id — идентификатор подсети, в которой находится кластер. Трансфер будет использовать эту подсеть для доступа к кластеру. Если идентификатор не указан, то кластер должен быть доступен из интернета.

    Если значение в этом поле задано для обоих эндпоинтов, то обе подсети должны быть размещены в одной зоне доступности.

  • security_groups — группы безопасности для сетевого трафика.

    Правила групп безопасности применяются к трансферу. Они позволяют открыть сетевой доступ с ВМ трансфера к кластеру. Подробнее см. в разделе Сеть в Yandex Data Transfer.

    Группы безопасности и подсеть subnet_id, если она указана, должны принадлежать той же сети, в которой размещен кластер.

    Примечание

    В Terraform сеть для групп безопасности задавать не нужно.

    Убедитесь, что указанные группы безопасности настроены.

  • connection.connection_options.database — имя базы данных.

  • connection.connection_options.user — имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • connection.connection_options.password.raw — пароль в текстовом виде.

Пример структуры конфигурационного файла:

resource "yandex_datatransfer_endpoint" "<имя_эндпоинта_в_Terraform>" {
  name = "<имя_эндпоинта>"
  settings {
    clickhouse_target {
      clickhouse_cluster_name="<группа_шардов>"
      security_groups = ["<список_идентификаторов_групп_безопасности>"]
      subnet_id       = "<идентификатор_подсети>"
      connection {
        connection_options {
          mdb_cluster_id = "<идентификатор_кластера>"
          database       = "<имя_переносимой_базы_данных>"
          user           = "<имя_пользователя_для_подключения>"
          password {
            raw = "<пароль_пользователя>"
          }
        }
      }
      <дополнительные_настройки_эндпоинта>
    }
  }
}

Подробнее см. в документации провайдера Terraform.

  • securityGroups — группы безопасности для сетевого трафика, правила которых применятся к ВМ и кластерам без изменения их настроек. Подробнее см. в разделе Сеть в Yandex Data Transfer.

    Убедитесь, что указанные группы безопасности настроены.

  • mdbClusterId — идентификатор кластера, к которому необходимо подключиться.

  • clickhouseClusterName — группа шардов, в которую будут передаваться данные. Если параметр не указан, данные будут размещены во всех шардах.

  • database — имя базы данных.

  • user — имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • password.raw — пароль пользователя для доступа к базе данных (в текстовом виде).

Пользовательская инсталляцияПользовательская инсталляция

Подключение к БД с явным указанием сетевых адресов и портов.

Консоль управления
CLI
Terraform
API
  • Шарды

    • Шард — укажите строку, которая позволит сервису отличать шарды друг от друга. Если в пользовательской инсталляции шардирование выключено, укажите произвольное имя.
    • Хосты — укажите FQDN или IP-адреса хостов, входящих в шард.
  • HTTP-порт — укажите номер порта, который сервис Data Transfer будет использовать для подключения.

    При подключении через HTTP-порт:

    • Для необязательных полей используются значения по умолчанию, если они заданы.
    • Поддерживается запись сложных типов (array, tuple и т. д.).
  • Нативный порт — укажите номер нативного порта, который сервис Data Transfer будет использовать для подключения.

  • SSL — включите, если кластер поддерживает только шифрованные соединения.

  • Сертификат CA — если требуется шифрование передаваемых данных, например для соответствия требованиям PCI DSS, загрузите файл сертификата или добавьте его содержимое в текстовом виде.

    Важно

    Если не добавить сертификат, трансфер может завершиться ошибкой.

  • Идентификатор подсети — выберите или создайте подсеть в нужной зоне доступности. Трансфер будет использовать эту подсеть для доступа к кластеру.

    Если значение в этом поле задано для обоих эндпоинтов, то обе подсети должны быть размещены в одной зоне доступности.

  • Пользователь — укажите имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • Пароль — укажите пароль пользователя для доступа к базе данных.

  • База данных — укажите имя базы данных в выбранном кластере.

  • Группы безопасности — выберите облачную сеть для размещения эндпоинта и группы безопасности для сетевого трафика.

    Это позволит применить к ВМ и кластерам в выбранной сети указанные правила групп безопасности без изменения настроек этих ВМ и кластеров. Подробнее см. в разделе Сеть в Yandex Data Transfer.

  • Тип эндпоинта — clickhouse-target.
  • --cluster-name — имя кластера, в который будут передаваться данные.

  • --host — список IP-адресов или FQDN хостов, к которым необходимо подключиться, в формате {имя_шарда}:{IP-адрес_или_FQDN_хоста}. Если в пользовательской инсталляции шардирование выключено, укажите произвольное имя шарда.

  • http-port — номер порта, который сервис Data Transfer будет использовать для подключения по HTTP.

  • native-port — номер порта, который сервис Data Transfer будет использовать для подключения к нативному интерфейсу ClickHouse®.

  • --ca-certificate — сертификат CA, если требуется шифрование передаваемых данных, например для соответствия требованиям PCI DSS.

    Важно

    Если не добавить сертификат, трансфер может завершиться ошибкой.

  • --subnet-id — идентификатор подсети, в которой находится хост. Трансфер будет использовать эту подсеть для доступа к хосту.

  • --database — имя базы данных.

  • --user — имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • --security-group — группы безопасности для сетевого трафика, правила которых применятся к ВМ и кластерам без изменения их настроек. Подробнее см. в разделе Сеть в Yandex Data Transfer.

  • Чтобы задать пароль пользователя для доступа к базе данных, используйте один из параметров:

    • --raw-password — пароль в текстовом виде.

    • --password-file — путь к файлу с паролем.

  • Тип эндпоинта — clickhouse_target.
  • Настройки шардов:

    • connection.connection_options.on_premise.shards.name — имя шарда, с помощью которого сервис сможет отличать шарды друг от друга. Если в пользовательской инсталляции шардирование выключено, укажите произвольное имя.
    • connection.connection_options.on_premise.shards.hosts — укажите FQDN или IP-адреса хостов, входящих в шард.
  • connection.connection_options.on_premise.http_port — номер порта, который сервис Data Transfer будет использовать для подключения по HTTP.

  • connection.connection_options.on_premise.native_port — номер порта, который сервис Data Transfer будет использовать для подключения к нативному интерфейсу ClickHouse®.

  • connection.connection_options.on_premise.tls_mode.enabled.ca_certificate — сертификат CA, если требуется шифрование передаваемых данных, например, для соответствия требованиям PCI DSS.

    Важно

    Если не добавить сертификат, трансфер может завершиться ошибкой.

  • clickhouse_cluster_name — имя кластера, в который будут передаваться данные.
  • subnet_id — идентификатор подсети, в которой находится кластер. Трансфер будет использовать эту подсеть для доступа к кластеру. Если идентификатор не указан, то кластер должен быть доступен из интернета.

    Если значение в этом поле задано для обоих эндпоинтов, то обе подсети должны быть размещены в одной зоне доступности.

  • security_groups — группы безопасности для сетевого трафика.

    Правила групп безопасности применяются к трансферу. Они позволяют открыть сетевой доступ с ВМ трансфера к ВМ c базой данных. Подробнее см. в разделе Сеть в Yandex Data Transfer.

    Группы безопасности должны принадлежать той же сети, что и подсеть subnet_id, если она указана.

    Примечание

    В Terraform сеть для групп безопасности задавать не нужно.

  • connection.connection_options.database — имя базы данных.

  • connection.connection_options.user — имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • connection.connection_options.password.raw — пароль в текстовом виде.

Пример структуры конфигурационного файла:

resource "yandex_datatransfer_endpoint" "<имя_эндпоинта_в_Terraform>" {
  name = "<имя_эндпоинта>"
  settings {
    clickhouse_target {
      clickhouse_cluster_name="<имя_кластера>"
      security_groups = ["<список_идентификаторов_групп_безопасности>"]
      subnet_id       = "<идентификатор_подсети>"
      connection {
        connection_options {
          on_premise {
            http_port   = "<порт_для_подключения_по_HTTP>"
            native_port = "<порт_для_подключения_к_нативному_интерфейсу>"
            shards {
              name  = "<имя_шарда>"
              hosts = [ "список IP-адресов или FQDN хостов шарда" ]
            }
            tls_mode {
              enabled {
                ca_certificate = "<сертификат_в_формате_PEM>"
              }
            }
          }
          database = "<имя_переносимой_базы_данных>"
          user     = "<имя_пользователя_для_подключения>"
          password {
            raw = "<пароль_пользователя>"
          }
        }
      }
      <дополнительные_настройки_эндпоинта>
    }
  }
}

Подробнее см. в документации провайдера Terraform.

  • onPremise — параметры подключения к базе данных:
    • shards – настройки шардов:

      • name — имя шарда, с помощью которого сервис сможет отличать шарды друг от друга. Если в пользовательской инсталляции шардирование выключено, укажите произвольное имя.
      • hosts — укажите FQDN или IP-адреса хостов, входящих в шард.
    • httpPort — номер порта, который сервис Data Transfer будет использовать для подключения по HTTP.

    • nativePort — номер порта, который сервис Data Transfer будет использовать для подключения к нативному интерфейсу ClickHouse®.

    • tlsMode — параметры шифрования передаваемых данных, если оно требуется, например для соответствия требованиям PCI DSS.

      • disabled — отключено.
      • enabled — включено
        • caCertificate — сертификат CA.

          Важно

          Если не добавить сертификат, трансфер может завершиться ошибкой.

    • subnetId — идентификатор подсети, в которой находится хост. Трансфер будет использовать эту подсеть для доступа к хосту.

  • clickhouseClusterName — имя кластера, в который будут передаваться данные.
  • securityGroups — группы безопасности для сетевого трафика, правила которых применятся к ВМ и кластерам без изменения их настроек. Подробнее см. в разделе Сеть в Yandex Data Transfer.

  • database — имя базы данных.

  • user — имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.

  • password.raw — пароль пользователя для доступа к базе данных (в текстовом виде).

Дополнительные настройкиДополнительные настройки

Консоль управления
CLI
Terraform
API
  • Политика очистки — выберите способ очистки данных в базе-приемнике перед переносом:

    • Не очищать — выберите эту опцию, если будет производиться только репликация без копирования данных.

    • Drop — полное удаление таблиц, участвующих в трансфере (вариант по умолчанию).

      Используйте эту опцию, чтобы при любой активации трансфера в базу-приемник всегда передавалась самая последняя версия схемы таблиц из источника.

    • Truncate — удалить только данные из таблиц, участвующих в трансфере, но оставить схему.

      Используйте эту опцию, если схема в базе-приемнике отличается от той, которая была бы перенесена из источника при трансфере.

  • Настройки шардирования — задайте настройки для шардирования:

    • Без шардирования — шардирование не используется.

    • Шардирование по значению колонки — имя колонки в таблицах, по которой следует шардировать данные. Равномерное распределение по шардам будет определяться хешем значения этой колонки. Укажите имя колонки для шардирования в соответствующем поле.

      Для шардирования по конкретным значениям колонки укажите их в поле Сопоставление. Это поле определяет соответствие значений колонки и индекса шарда (порядковый номер шарда в отсортированном по именам списке шардов) для шардирования по конкретным значениям данных.

    • Шардирование по идентификатору трансфера — данные по шардам будут распределяться на основе значения идентификатора трансфера. При этом трансфер игнорирует настройку Сопоставление и шардирует данные только по идентификатору трансфера.

    • Равномерное случайное шардирование — данные по шардам будут распределяться случайным образом (количество данных на каждом шарде будет примерно одинаковым).

  • Переименование таблиц — при необходимости задайте настройки переименования таблиц при трансфере.

  • Интервал записи — укажите задержку, с которой данные должны поступать в кластер-приемник. Увеличьте значение в этом поле, если ClickHouse® не успевает делать слияние кусков данных.

  • --alt-name — правила переименования таблиц базы-источника при переносе в базу-приемник. Значения указываются в формате <имя_таблицы_в_источнике>:<имя_таблицы_в_приемнике>.

  • Настройки шардирования данных:

    • --shard-by-column-hash — имя колонки в таблицах, по которой следует шардировать данные. Равномерное распределение по шардам будет определяться хешем значения этой колонки.

    • --custom-sharding-column-name— имя колонки в таблицах, по которой следует шардировать данные. Шардирование выполняется по значениям колонки, заданным с помощью настройки --custom-sharding-mapping-string.

    • --custom-sharding-mapping-string — сопоставление значений колонки, указанной в настройке --custom-sharding-column-name, и шардов. Значения настройки указываются в формате <значение_колонки>:<имя_шарда>.

    • --shard-by-transfer-id — Данные по шардам будут распределяться на основе значения идентификатора трансфера. Параметр не содержит значения.

    Вы можете указать только один из вариантов шардирования:

    • --shard-by-column-hash;
    • --custom-sharding-column-name и --custom-sharding-mapping-string;
    • --shard-by-transfer-id.
  • cleanup_policy — способ очистки данных в базе-приемнике перед переносом:

    • CLICKHOUSE_CLEANUP_POLICY_DISABLED — не очищать (вариант по умолчанию).

      Выберите эту опцию, если будет производиться только репликация без копирования данных.

    • CLICKHOUSE_CLEANUP_POLICY_DROP — полное удаление таблиц, участвующих в трансфере.

      Используйте эту опцию, чтобы при любой активации трансфера в базу-приемник всегда передавалась самая последняя версия схемы таблиц из источника.

    • CLICKHOUSE_CLEANUP_POLICY_TRUNCATE — удалить только данные из таблиц, участвующих в трансфере, но оставить схему.

      Используйте эту опцию, если схема в базе-приемнике отличается от той, которая была бы перенесена из источника при трансфере.

  • alt_names — правила переименования таблиц базы-источника при переносе в базу-приемник:

    • from_name — имя таблицы в источнике.
    • to_name — имя таблицы в приемнике.
  • Настройки шардирования данных:

    • sharding.column_value_hash.column_name — имя колонки в таблицах, по которой следует шардировать данные. Равномерное распределение по шардам будет определяться хешем значения этой колонки.

    • sharding.transfer_id — данные по шардам распределяются на основе значения идентификатора трансфера. Блок transfer_id не содержит параметров.

    • sharding.custom_mapping — шардирование по значению колонки:

      • column_name — имя колонки в таблицах, по которой следует шардировать данные.

      • mapping — сопоставление значений колонки и шардов:

        • column_value.string_value — значение колонки.
        • shard_name — имя шарда.
    • sharding.round_robin — данные по шардам будут распределяться случайным образом (количество данных на каждом шарде будет примерно одинаковым). Блок round_robin не содержит параметров.

    Вы можете указать только один из вариантов шардирования: sharding.column_value_hash.column_name, sharding.transfer_id, sharding.custom_mapping или sharding.round_robin. Если вариант шардирования не указан, то все данные переносятся в один шард.

  • altNames — правила переименования таблиц базы-источника при переносе в базу-приемник.

    • fromName — имя таблицы в источнике.
    • toName — имя таблицы в приемнике.
  • cleanupPolicy — способ очистки данных в базе-приемнике перед переносом:

    • CLICKHOUSE_CLEANUP_POLICY_DISABLED — не очищать (вариант по умолчанию).

      Выберите эту опцию, если будет производиться только репликация без копирования данных.

    • CLICKHOUSE_CLEANUP_POLICY_DROP — полное удаление таблиц, участвующих в трансфере.

      Используйте эту опцию, чтобы при любой активации трансфера в базу-приемник всегда передавалась самая последняя версия схемы таблиц из источника.

    • CLICKHOUSE_CLEANUP_POLICY_TRUNCATE — удалить только данные из таблиц, участвующих в трансфере, но оставить схему.

      Используйте эту опцию, если схема в базе-приемнике отличается от той, которая была бы перенесена из источника при трансфере.

  • sharding — настройки для шардирования данных. Вы можете указать только один из вариантов шардирования:

    • columnValueHash.columnName — имя колонки в таблицах, по которой следует шардировать данные. Равномерное распределение по шардам будет определяться хешем значения этой колонки.

    • customMapping — шардирование по значению колонки:

      • columnName — имя колонки в таблицах, по которой следует шардировать данные.

      • mapping — сопоставление значений колонки и шардов:

        • columnValue.stringValue — значение колонки.
        • shardName — имя шарда.
    • transferId — данные по шардам будут распределяться на основе значения идентификатора трансфера. Параметр не содержит значения.

    • roundRobin — данные по шардам будут распределяться случайным образом (количество данных на каждом шарде будет примерно одинаковым). Параметр не содержит значения.

    Если вариант шардирования не указан, то все данные переносятся в один шард.

После настройки источника и приемника данных создайте и запустите трансфер.

Рекомендации по настройке эндпоинтовРекомендации по настройке эндпоинтов

Для ускорения поставки большого объема данных в ClickHouse® из очередей Data Streams или Managed Service for Apache Kafka® укажите специальные настройки эндпоинтов:

Консоль управления
CLI
Terraform
API
  • Если в кластере-приемнике ClickHouse® включено шардирование и перенос выполняется в шардированную таблицу, используйте для записи данных нижележащую таблицу на движке ReplicatedMergeTree, а не распределенную таблицу на движке Distributed. При этом выполняйте выборку перенесенных данных в приемнике из распределенной таблицы. Чтобы переопределить таблицу для записи, укажите ее в настройке приемника Переименование таблиц → Имя таблицы приёмника.
  • Если в источнике вы выбрали формат JSON в опции Правила конвертации → Формат данных, то в схеме данных для строковых типов указывайте UTF-8 вместо STRING.
  • При выборе опции Добавить неразмеченные столбцы учитывайте, что это может привести к снижению скорости трансфера.
  • Если нужно перенести несколько топиков, укажите в настройке приемника Переименование таблиц для всех имен топиков источника одинаковое имя таблицы ClickHouse®.
  • Если в кластере-приемнике ClickHouse® включено шардирование и перенос выполняется в шардированную таблицу, используйте для записи данных нижележащую таблицу на движке ReplicatedMergeTree, а не распределенную таблицу на движке Distributed. При этом выполняйте выборку перенесенных данных в приемнике из распределенной таблицы. Чтобы переопределить таблицу для записи, укажите ее в настройке приемника --alt-name.
  • Если нужно перенести несколько топиков, укажите в атрибуте --alt-name эндпоинта-приемника для всех топиков источника одно и то же имя таблицы ClickHouse® приемника.
  • Если в кластере-приемнике ClickHouse® включено шардирование и перенос выполняется в шардированную таблицу, используйте для записи данных нижележащую таблицу на движке ReplicatedMergeTree, а не распределенную таблицу на движке Distributed. При этом выполняйте выборку перенесенных данных в приемнике из распределенной таблицы. Чтобы переопределить таблицу для записи, укажите ее в настройке приемника alt_names.to_name.
  • Если в источнике вы выбрали формат JSON в блоке parser.json_parser:
    • В схеме данных parser.json_parser.data_schema для строковых типов указывайте UTF-8 вместо STRING.
    • В случае атрибута parser.json_parser.add_rest_column=true скорость трансфера может снизиться.
  • Если нужно перенести несколько топиков, укажите в атрибуте alt_names эндпоинта-приемника для всех топиков в alt_names.from_name одно и то же имя таблицы ClickHouse® в alt_names.to_name.
  • Если в кластере-приемнике ClickHouse® включено шардирование и перенос выполняется в шардированную таблицу, используйте для записи данных нижележащую таблицу на движке ReplicatedMergeTree, а не распределенную таблицу на движке Distributed. При этом выполняйте выборку перенесенных данных в приемнике из распределенной таблицы. Чтобы переопределить таблицу для записи, укажите ее в настройке приемника altNames.toName.
  • Если в источнике вы выбрали формат JSON в блоке parser.jsonParser:
    • В схеме данных parser.jsonParser.dataSchema для строковых типов указывайте UTF-8 вместо STRING.
    • В случае параметра parser.jsonParser.addRestColumn=true скорость трансфера может снизиться.
  • Если нужно перенести несколько топиков, укажите в параметре altNames эндпоинта-приемника для всех топиков в altNames.fromName одно и то же имя таблицы ClickHouse® в altNames.toName.

Решение проблем, возникающих при переносе данныхРешение проблем, возникающих при переносе данных

  • Не добавляются новые таблицы
  • Не переносятся данные
  • Неподдерживаемый диапазон дат
  • Нехватка ресурсов или растущая задержка передачи данных
  • Превышение количества блоков данных

См. полный список рекомендаций в разделе Решение проблем.

Не добавляются новые таблицыНе добавляются новые таблицы

​В трансфер типа Копирование и репликация не добавляются новые таблицы.

Решение:

  1. Создайте таблицы в базе-приемнике вручную. Чтобы трансфер работал, при создании таблицы:

    1. Добавьте в нее служебные поля трансфера:

      __data_transfer_commit_time timestamp,
      __data_transfer_delete_time timestamp
      
    2. Используйте движок ReplacingMergeTree:

      ENGINE = ReplacingMergeTree
      
  2. Создайте отдельный трансфер типа Копирование и репликация и добавьте в список объектов для переноса только новые таблицы. При этом исходный трансфер типа Копирование и репликация можно не деактивировать. Активируйте новый трансфер, а после перехода в статус Реплицируется деактивируйте его.

    Чтобы добавить другие таблицы, замените ими список объектов для переноса в созданном отдельном трансфере, вновь активируйте его, а после перехода в статус Реплицируется деактивируйте.

    Примечание

    Так как два трансфера одновременно переносили данные, то в новых таблицах на приемнике присутствуют дубликаты записей. Чтобы скрыть их, выполните запрос SELECT * from TABLE <имя_таблицы> FINAL, а чтобы удалить — запрос OPTIMIZE TABLE <имя_таблицы>.

Не переносятся данныеНе переносятся данные

При попытке перенести данные из источника ClickHouse® выводится ошибка:


Syntax error: failed at position 25 ('-'): <детали_ошибки>. Expected one of: token, Dot, UUID, alias, AS, identifier, FINAL, SAMPLE, INTO OUTFILE, FORMAT, SETTINGS, end of query

Решение:

Yandex Data Transfer не может переносить базы данных, в названии которых есть дефис. Переименуйте базу данных, если есть такая возможность.

Неподдерживаемый диапазон датНеподдерживаемый диапазон дат

Если в переносимых данных есть даты вне поддерживаемых диапазонов, ClickHouse® возвращает ошибку:

TYPE_ERROR [target]: failed to run (abstract1 source): failed to push items from 0 to 1 in batch:
Push failed: failed to push 1 rows to ClickHouse shard 0:
ClickHouse Push failed: Unable to exec changeItem: clickhouse:
dateTime <имя_поля> must be between 1900-01-01 00:00:00 and 2262-04-11 23:47:16

Поддерживаемые диапазоны дат в ClickHouse®:

  • Для полей с типом DateTime64 — с 1900-01-01 по 2299-12-31. Подробнее см. в документации ClickHouse®.
  • Для полей с типом DateTime — с 1970-01-01 по 2106-02-07. Подробнее см. в документации ClickHouse®.

Решение: используйте один из вариантов:

  • Приведите все даты в базе-источнике к поддерживаемому в ClickHouse® диапазону.
  • В параметрах эндпоинта-источника исключите таблицу с некорректными датами из трансфера.
  • В параметрах трансфера укажите трансформер Преобразовать значения в строки. В этом случае при трансфере изменится тип поля.

Нехватка ресурсов или растущая задержка передачи данныхНехватка ресурсов или растущая задержка передачи данных

При переносе данных в приемник ClickHouse® могут возникнуть следующие проблемы:

  1. Трансфер прерывается с ошибкой. Текст ошибки:

    pod instance restarted
    
  2. В мониторинге состояния трансфера наблюдается растущая задержка передачи данных (разница между временем появления записей на приемнике и временем их появления на источнике).

Возможная причина:

Слишком большой интервал записи в настройках эндпоинта-приемника, что вызывает нехватку оперативной памяти (OOM) на ВМ трансфера.

Решение:

Установите в консоли управления значение настройки эндпоинта-приемника Интервал записи равным 10 секунд или меньше.

Дополнительно в случае трансфера типа Копирование активируйте его повторно. Трансферы других типов перезапустятся автоматически.

Превышение количества блоков данныхПревышение количества блоков данных

При переносе данных в приемник ClickHouse® трансфер прерывается с ошибкой. Текст ошибки:

ERROR Unable to Activate ... 
unable to upload tables: unable to upload data objects: unable upload part <имя таблицы> (): 
unable to start \*clickhouse.HTTPSource event source: failed to push events to destination: 
unable to push http batch: <имя таблицы>: failed: INSERT INTO ...

Дополнительно может выводиться ошибка:

pod instance restarted

Ошибки возникают при попытке вставить в базу-приемник ClickHouse® больше блоков данных, чем позволяет настройка max_partitions_per_insert_block.

Решение: увеличьте параметр max_partitions_per_insert_block для учетной записи, под которой трансфер подключается к приемнику. Для приемника Managed Service for ClickHouse® параметр можно изменить в настройках пользователя. Для пользовательской инсталляции ClickHouse® можно создать профиль настроек и назначить его учетной записи:

CREATE SETTINGS PROFILE max_partitions
SETTINGS max_partitions_per_insert_block = <значение_настройки>

ALTER USER <имя_пользователя> PROFILE 'max_partitions'

ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc.

Была ли статья полезна?

Предыдущая
Источник
Следующая
Источник
Проект Яндекса
© 2025 ООО «Яндекс.Облако»