Трансфер данных
Трансфер в YDB — асинхронный механизм переноса данных из топика
В Managed Service for YDB трансфер доступен только в dedicated режиме работы базы данных. Пример создания трансфера, который переносит данные внутри одной базы данных описан в статье Трансфер — быстрый старт
Трансфер может читать данные из топиков, которые находятся как в той же базе данных
Для чтения топика из другой базы данных Managed Service for YDB в Yandex Cloud поддержана авторизация через Identity and Access Management.
Создание трансфера, читающего данные из другой базы данных Managed Service for YDB в Yandex Cloud
Подготовьте API-ключ для доступа к топику
Примечание
Действия по подготовке API-ключа нужно выполнять в том облаке, где находится база данных с исходным топиком.
- Создать сервисный аккаунт, где находится топик.
- Назначить сервисному аккаунту роли:
- Для чтения из потока данных:
ydb.viewer. - Для автоматического добавления читателя
, если применимо:ydb.admin.
- Для чтения из потока данных:
- Создать API-ключ c областью действия
yc.ydb.topics.manage.
Создайте секрет для доступа к топику в базе источнике
В облаке, где будет создан трансфер, добавьте секрет:
CREATE OBJECT example_secret (TYPE SECRET) WITH value="ApiKey <your_api_key>";
Где:
<your_api_key>— API-ключ, созданный выше.
Создайте топик
Создайте топик, из которого трансфер будет читать данные. Это можно сделать с помощью SQL-запроса:
CREATE TOPIC `transfer_recipe/source_topic`;
Топик transfer_recipe/source_topic позволяет передавать любые неструктурированные данные.
Создайте таблицу
После создания топика следует создать таблицу, в которую будут поступать данные из топика source_topic. Это можно сделать с помощью SQL-запроса:
CREATE TABLE `transfer_recipe/target_table` (
partition Uint32 NOT NULL,
offset Uint64 NOT NULL,
data String,
PRIMARY KEY (partition, offset)
);
Таблица transfer_recipe/target_table имеет три столбца:
partition— идентификатор партиции топика, из которой получено сообщение;offset— порядковый номер , идентифицирующий сообщение внутри партиции;data— тело сообщения.
Создайте трансфер
После создания топика и таблицы нужно добавить трансфер данных, который будет переносить сообщения из топика в таблицу. Это можно сделать с помощью SQL-запроса:
$transformation_lambda = ($msg) -> {
return [
<|
partition: $msg._partition,
offset: $msg._offset,
data: $msg._data
|>
];
};
CREATE TRANSFER `transfer_recipe/example_transfer`
FROM `transfer_recipe/source_topic` TO `transfer_recipe/target_table`
USING $transformation_lambda
WITH (
CONNECTION_STRING = '<endpoint>',
TOKEN_SECRET_NAME = 'example_secret'
)
Где:
<endpoint>— эндпоинт подключения к базе источнику, где находится топик. Имеет видgrpcs://lb.etn952fh3eo2jd2mrIhK.ydb.mdb.yandexcloud.net:2135/?database=/global/b1gvcqr959dbmi0e5c1B/etn77atb9o1epqUsCGoY. Эндпоинт отображается в консоли управления , на странице потока данных, на вкладке Обзор, в поле Эндпоинт.example_secret— секрет, созданный выше.
Проверьте работу трансфера
Для проверки правильной работы трансфера можно записать в топик несколько сообщений.
Через некоторое время после того, как сообщения будут добавлены в топик source_topic, соответствующие записи появятся в таблице transfer_recipe/target_table. Чтобы убедиться в этом, выполните следующий SQL-запрос:
SELECT *
FROM `transfer_recipe/target_table`;