Операция записи

Содержание раздела
  1. Нумерация операций
  2. Непротиворечивость изменений в операции
  3. Операции в дельте и вне дельты
  4. Статусы операций
  5. Управление операциями

Операция записи — действие по сохранению изменений данных в логической таблице. Каждая операция является результатом выполнения одного запроса на загрузку или обновление данных. Источником данных может быть топик Kafka, сам запрос или датасорс.

В одной логической таблице одновременно может выполняться только одна операция. В разных логических таблицах операции могут выполняться параллельно.

Операции атомарны: если системе не удалось выполнить какое-то изменение в таблице, вся операция отменяется. Система изолирует изменения по операции от изменений по другим операциям и позволяет обращаться к данным отдельной операции.

Шаги по добавлению, удалению и изменению данных описаны в разделах Загрузка данных и Обновление данных.

Нумерация операций

Операции нумеруются в рамках логической базы данных, начиная с нуля. Номера присваиваются операциям в порядке начала их исполнения. Например, после операции 2 всегда начинает выполняться операция 3, но операция 3 может завершиться раньше операции 2, если эти операции выполняются в разных таблицах.

Система не гарантирует непрерывность нумерации операций.

На рисунке ниже показан пример с двумя операциями записи в одной логической таблице stores. Для примера записи таблицы добавлены разными операциями.

Операции записи в одной логической таблице

Номер операции соответствуют номеру версий данных в истории изменений логической БД. К любой такой версии можно обратиться с помощью ключевого слова FOR SYSTEM_TIME.

Непротиворечивость изменений в операции

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

Информацию о разных состояниях одного объекта необходимо разделять по разным операциям записи, как показано в примере на рисунке ниже. В примере показано изменение данных магазина, сменившего адрес. Первоначальные данные добавлены операцией 2, а новые данные — операцией 3.

Изменение данных магазина, сменившего адрес

Операции в дельте и вне дельты

Операции записи можно выполнять в дельте или вне дельты.

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

Операции записи, выполненные вне дельты, получают метку времени, соответствующую времени закрытия следующей за ними дельты. Пока после таких операций нет закрытой дельты, их изменения доступны только в запросах по номерам операций.

Статусы операций

Возможные статусы операции записи:

  • Выполняется (0) — обработка операции запущена и еще не завершена,
  • Успешно обработана (1) — обработка операции успешно завершена,
  • Отменяется (2) — отмена операции запущена и еще не завершена,
  • Отменена (3) — отмена операции успешно завершена.

Операции со статусами «Выполняется» и «Отменяется» называются незавершенными, операции со статусами «Успешно обработана» и «Отменена» — завершенными.

Управление операциями

Незавершенные операции записи можно перезапускать и отменять. Подробнее см. в разделе Управление операциями записи.