Трансфер — быстрый старт

Эта статья поможет быстро начать работу с трансфером в 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.

См. также: