Трансфер — быстрый старт
Эта статья поможет быстро начать работу с трансфером в YDB на простейшем модельном примере.
В статье рассматриваются следующие шаги работы с трансфером:
- создание топика, из которого будет читать трансфер;
- создание таблицы, в которую будут записываться данные;
- создание трансфера;
- заполнение топика данными;
- проверка содержимого таблицы.
Шаг 1. Создание топика
Сначала нужно создать топик в YDB, из которого трансфер будет читать данные. Это можно сделать с помощью SQL-запроса:
CREATE TOPIC `transfer_recipe/source_topic`;
Топик transfer_recipe/source_topic
позволяет передавать любые неструктурированные данные.
Шаг 2. Создание таблицы
После создания топика следует создать таблицу, в которую будут поступать данные из топика 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
— тело сообщения.
Шаг 3. Создание трансфера
После создания топика и таблицы нужно добавить трансфер данных, который будет переносить сообщения из топика в таблицу. Это можно сделать с помощью 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;
В этом примере:
$transformation_lambda
— это правило преобразования сообщения из топика в колонки таблицы. В данном случае сообщение из топика переносится в таблицу без изменений. Подробнее о настройке правил преобразования вы можете узнать в документации;$msg
— переменная, содержащая обрабатываемое сообщение из топика.
Шаг 4. Заполнение топика данными
После создания трансфера можно записать в топик сообщения, например, с помощью YDB CLI.
Примечание
В примерах используется профиль quickstart
, подробнее смотрите в Создание профиля для соединения с тестовой БД.
echo "Message 1" | ydb --profile quickstart topic write source_topic
echo "Message 2" | ydb --profile quickstart topic write source_topic
echo "Message 3" | ydb --profile quickstart topic write source_topic
Шаг 5. Проверка содержимого таблицы
После записи сообщении в топик source_topic
спустя некоторое время появятся записи в таблице transfer_recipe/target_table
. Проверить их наличие можно с помощью SQL-запроса:
SELECT *
FROM `transfer_recipe/target_table`;
Результат выполнения запроса:
partition | offset | data |
---|---|---|
0 | 0 | Message 1 |
0 | 1 | Message 2 |
0 | 2 | Message 3 |
Строки в таблицу добавляются не для каждого сообщения, полученного из топика, а пакетно с буферизацией. По умолчанию данные записываются в таблицу каждые 60 секунд или при достижении объёма накопленных данных в 8 МБ. Эти параметры можно явно задать при создании трансфера или изменить их позже.
Заключение
Данная статья приводит простой пример работы с трансфером: создание топика, таблицы и трансфера, записи в топик и проверки результата работы трансфера.
Эти примеры призваны проиллюстрировать синтаксис при работе с трансфером. Более реалистичный пример см. в статье описывающей поставку access лога NGINX.
См. также: