Операция записи
Содержание раздела
Операция записи — действие по сохранению изменений данных в логической таблице. Каждая операция является результатом выполнения одного запроса на загрузку или обновление данных. Источником данных может быть топик Kafka, сам запрос или датасорс.
В одной логической таблице одновременно может выполняться только одна операция. В разных логических таблицах операции могут выполняться параллельно.
Операции атомарны: если системе не удалось выполнить какое-то изменение в таблице, вся операция отменяется. Система изолирует изменения по операции от изменений по другим операциям и позволяет обращаться к данным отдельной операции.
Шаги по добавлению, удалению и изменению данных описаны в разделах Загрузка данных и Обновление данных.
Нумерация операций
Операции нумеруются в рамках логической базы данных, начиная с нуля. Номера присваиваются операциям в порядке начала их исполнения. Например, после операции 2 всегда начинает выполняться операция 3, но операция 3 может завершиться раньше операции 2, если эти операции выполняются в разных таблицах.
Система не гарантирует непрерывность нумерации операций.
На рисунке ниже показан пример с двумя операциями записи в одной логической таблице stores
. Для примера записи таблицы добавлены разными операциями.
Номер операции соответствуют номеру версий данных в истории изменений логической БД. К любой такой версии можно обратиться с помощью ключевого слова FOR SYSTEM_TIME.
Непротиворечивость изменений в операции
Операция записи должна содержать непротиворечивые изменения данных. Это означает, что каждая добавляемая или изменяемая запись должна иметь уникальное значение первичного ключа в рамках операции. Исключение — полные дубликаты записей, из которых система сохраняет только один экземпляр.
Информацию о разных состояниях одного объекта необходимо разделять по разным операциям записи, как показано в примере на рисунке ниже. В примере показано изменение данных магазина, сменившего адрес. Первоначальные данные добавлены операцией 2, а новые данные — операцией 3.
Операции в дельте и вне дельты
Операции записи можно выполнять в дельте или вне дельты.
Дельта позволяет сгруппировать операции записи и управлять ими как группой, откатывая изменения или проставляя метку времени по всем операциям группы сразу. Если в логической базе данных есть открытая дельта, все операции записи, начатые после ее открытия и завершенные до ее закрытия, попадают в эту дельту. Изменения по операциям записи в дельте становятся доступны для чтения и выгрузки без указания FOR SYSTEM_TIME после закрытия этой дельты.
Операция записи, выполненная вне дельты, получает метку времени, равную серверному времени ее завершения. Изменения по операции записи вне дельты становятся доступны для чтения и выгрузки без указания FOR SYSTEM_TIME
после завершения этой операции.
Статусы операций
Возможные статусы операции записи:
- Выполняется (0) — обработка операции запущена и еще не завершена,
- Успешно обработана (1) — обработка операции успешно завершена,
- Отменяется (2) — отмена операции запущена и еще не завершена,
- Отменена (3) — отмена операции успешно завершена.
Операции со статусами «Выполняется» и «Отменяется» называются незавершенными, операции со статусами «Успешно обработана» и «Отменена» — завершенными.
При ошибках загрузки и обновления данных система автоматически отменяет неуспешные операции записи и возвращает данные датасорсов в состояние, которое предшествовало загрузке или обновлению. Но, если произошел сбой, например из-за неполадок в сети, операция может остаться в статусе «Отменяется» и потребовать ручного разбора.
Управление операциями
Незавершенные операции записи можно перезапускать и отменять. Подробнее см. в разделе Управление операциями записи.