Передача данных в эндпоинт-приемник ClickHouse®
С помощью сервиса Yandex Data Transfer вы можете переносить данные в базу ClickHouse® и реализовывать различные сценарии переноса, обработки и трансформации данных. Для реализации трансфера:
- Ознакомьтесь с возможными сценариями передачи данных.
- Настройте один из поддерживаемых источников данных.
- Подготовьте базу данных ClickHouse® к трансферу.
- Настройте эндпоинт-приемник в Yandex Data Transfer.
- Создайте и запустите трансфер.
- Выполняйте необходимые действия по работе с базой и контролируйте трансфер.
- При возникновении проблем, воспользуйтесь готовыми решениями по их устранению.
Сценарии передачи данных в ClickHouse®
-
Миграция — перенос данных из одного хранилища в другое. Часто это перенос базы из устаревших локальных баз в управляемые облачные.
-
Поставка данных — процесс доставки произвольных данных в целевые хранилища. Процесс поставки включает извлечение данных из очереди и их десериализацию с последующей трансформацией данных в формат целевого хранилища.
-
Загрузка данных в витрины — процесс трансфера подготовленных данных в хранилища с целью последующей визуализации.
Подробное описание возможных сценариев передачи данных в Yandex Data Transfer см. в разделе Практические руководства.
Настройка источника данных
Настройте один из поддерживаемых источников данных:
- PostgreSQL;
- MySQL®;
- ClickHouse®;
- Greenplum®;
- Apache Kafka®;
- Airbyte®;
- Яндекс Метрика;
- YDS;
- Yandex Object Storage;
- Oracle;
- Elasticsearch;
- OpenSearch.
Полный список поддерживаемых источников и приемников в Yandex Data Transfer см. в разделе Доступные трансферы.
Примечание
В ClickHouse® есть ограничения на диапазон дат. Наличие в базе-источнике неподдерживаемых дат может привести к ошибке и остановке трансфера.
Подготовка базы данных приемника
-
Если нужно перенести несколько баз данных, создайте для каждой из них отдельный трансфер.
-
Создайте пользователя с доступом к базе приемника.
После старта трансфер подключится к приемнику от имени этого пользователя.
-
Если в кластере включено управление пользователями через 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.
-
Назначьте кластеру Managed Service for ClickHouse® созданную группу безопасности.
-
Если вы не планируете использовать для подключения к внешнему кластеру сервис Cloud Interconnect или VPN, разрешите подключения к такому кластеру из интернета с IP-адресов, используемых сервисом Data Transfer
.Подробнее о настройке сети для работы с внешними ресурсами см. в концепции.
-
Создайте базу-приемник. Ее имя должно совпадать с именем базы-источника. Если нужно перенести несколько баз данных, создайте для каждой из них отдельный трансфер.
-
Создайте пользователя с доступом к базе приемника.
После старта трансфер подключится к приемнику от имени этого пользователя.
-
Выдайте созданному пользователю права:
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®
При создании или изменении эндпоинта вы можете задать:
- Настройки подключения к кластеру Yandex Managed Service for ClickHouse® или пользовательской инсталляции, в т. ч. на базе виртуальных машин Yandex Compute Cloud. Эти параметры обязательные.
- Дополнительные параметры.
См. также рекомендации по настройке эндпоинта при поставке данных в ClickHouse® из очередей.
Кластер Managed Service for ClickHouse®
Важно
Для создания или редактирования эндпоинта управляемой базы данных вам потребуется роль managed-clickhouse.viewer
или примитивная роль viewer
, выданная на каталог кластера этой управляемой базы данных.
Подключение к БД с указанием идентификатора кластера в Yandex Cloud.
-
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
— пароль пользователя для доступа к базе данных (в текстовом виде).
Пользовательская инсталляция
Подключение к БД с явным указанием сетевых адресов и портов.
-
Шарды
- Шард — укажите строку, которая позволит сервису отличать шарды друг от друга. Если в пользовательской инсталляции шардирование выключено, укажите произвольное имя.
- Хосты — укажите 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 . -
subnetId
— идентификатор подсети, в которой находится хост. Трансфер будет использовать эту подсеть для доступа к хосту.
-
clickhouseClusterName
— имя кластера, в который будут передаваться данные.-
securityGroups
— группы безопасности для сетевого трафика, правила которых применятся к ВМ и кластерам без изменения их настроек. Подробнее см. в разделе Сеть в Yandex Data Transfer. -
database
— имя базы данных. -
user
— имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных. -
password.raw
— пароль пользователя для доступа к базе данных (в текстовом виде).
Дополнительные настройки
-
Политика очистки — выберите способ очистки данных в базе-приемнике перед переносом:
-
Не очищать
— выберите эту опцию, если будет производиться только репликация без копирования данных. -
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® укажите специальные настройки эндпоинтов:
- Если в кластере-приемнике 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
.
Решение проблем, возникающих при переносе данных
- Не добавляются новые таблицы
- Не переносятся данные
- Неподдерживаемый диапазон дат
- Нехватка ресурсов или растущая задержка передачи данных
- Превышение количества блоков данных
См. полный список рекомендаций в разделе Решение проблем.
Не добавляются новые таблицы
В трансфер типа Копирование и репликация не добавляются новые таблицы.
Решение:
-
Создайте таблицы в базе-приемнике вручную. Чтобы трансфер работал, при создании таблицы:
-
Добавьте в нее служебные поля трансфера:
__data_transfer_commit_time timestamp, __data_transfer_delete_time timestamp
-
Используйте движок
ReplacingMergeTree
:ENGINE = ReplacingMergeTree
-
-
Создайте отдельный трансфер типа Копирование и репликация и добавьте в список объектов для переноса только новые таблицы. При этом исходный трансфер типа Копирование и репликация можно не деактивировать. Активируйте новый трансфер, а после перехода в статус Реплицируется деактивируйте его.
Чтобы добавить другие таблицы, замените ими список объектов для переноса в созданном отдельном трансфере, вновь активируйте его, а после перехода в статус Реплицируется деактивируйте.
Примечание
Так как два трансфера одновременно переносили данные, то в новых таблицах на приемнике присутствуют дубликаты записей. Чтобы скрыть их, выполните запрос
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® могут возникнуть следующие проблемы:
-
Трансфер прерывается с ошибкой. Текст ошибки:
pod instance restarted
-
В мониторинге состояния трансфера наблюдается растущая задержка передачи данных (разница между временем появления записей на приемнике и временем их появления на источнике).
Возможная причина:
Слишком большой интервал записи в настройках эндпоинта-приемника, что вызывает нехватку оперативной памяти (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