COMMIT DELTA

Содержание раздела
  1. Действия перед запросом
  2. Синтаксис
    1. Ключевое слово IMMEDIATE
      1. Пример работы COMMIT DELTA IMMEDIATE
    2. Ключевое слово SET 'YYYY-MM-DD hh:mm:ss[.SSSSSS]'
  3. Варианты ответа
    1. Параметры ответа
  4. Ограничения
  5. Пример

Поддерживается в версиях: 7.0 / 6.12 / 6.11 / 6.10 / 6.9 / 6.8 / 6.7 / 6.6 / 6.5 / 6.4 / 6.3 / 6.2 / 6.1 / 6.0 / 5.8 / 5.7 / 5.6 / 5.5 / 5.4 / 5.3 / 5.2 / 5.1 / 5.0.

Запрос закрывает открытую дельту и делает ее недоступной для новых операций записи.

В запросе можно указать дату и время закрытия дельты.

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

Действия перед запросом

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

Синтаксис

COMMIT DELTA [IMMEDIATE] [SET 'YYYY-MM-DD hh:mm:ss[.SSSSSS]']

Ключевое слово IMMEDIATE

Позволяет закрыть дельту, не дожидаясь завершения всех активных операций записи, начатых в этой дельте и до нее.

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

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

Наличие незавершенных операций можно проверить с помощью запроса GET_WRITE_OPERATIONS. Об управлении незавершенными операциями см. в разделе Управление операциями записи.

Пример работы COMMIT DELTA IMMEDIATE

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

Исключение операций 2 и 3 из дельты при выполнении COMMIT DELTA IMMEDIATE

На рисунке ниже показан пример распределения операций записи по дельтам при выполнении запроса COMMIT DELTA IMMEDIATE. Пунктиром отмечена операция, исполнявшаяся в момент вызова COMMIT DELTA IMMEDIATE.

Распределение операций по дельтам и назначение операциям меток времени

Для наглядности все операции на рисунке выше завершаются последовательно одна за другой, а дельта открывается после завершения всех предыдущих операций. Но следует учитывать, что в общем случае операция с номером N в одной таблице может завершиться позже операции c номером N+1 в другой таблице, а операция, начатая до дельты, может завершиться после дельты.

Ключевое слово SET 'YYYY-MM-DD hh:mm:ss[.SSSSSS]'

Задает дату и время закрытия дельты. Значение можно указать с любой точность от секунд до микросекунд (см. раздел Форматы даты и времени в запросах).

Значение должно превышать дату и время закрытия последней дельты в логической БД. При этом оно может не превышать метки времени тех операций записи, которые были выполнены после последней закрытой дельты, если такие есть.

Если ключевое слово не указано, система устанавливает в качестве метки времени дельты текущее время сервера в формате YYYY-MM-DD hh:mm:ss.SSSSSS.

Варианты ответа

В ответе возвращается:

  • объект ResultSet c одной записью, содержащей информацию о дельте, при успешном выполнении запроса;
  • исключение при неуспешном выполнении запроса.

Параметры ответа

Успешный ответ содержит параметры:

  • delta_num — номер дельты;
  • delta_date — дата и время закрытия дельты в формате YYYY-MM-DD hh:mm:ss.SSSSSS;
  • cn_from — первая операция среди операций записи, выполненных в дельте.

Ограничения

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

Дату и время последней закрытой дельты можно узнать с помощью запроса GET_DELTA_OK или GET-метода /datamarts/{datamart}/deltas/latest/ok.

Пример

Закрытие дельты с указанной меткой времени и ожиданием завершения операций записи:

USE marketing;

COMMIT DELTA SET '2023-08-21 09:29:54.324';

Закрытие дельты без указания метки времени и без ожидания незавершенных операций записи:

USE marketing;

COMMIT DELTA IMMEDIATE;

Закрытие дельты с указанной меткой времени и без ожидания незавершенных операций записи:

USE marketing;

COMMIT DELTA IMMEDIATE SET '2023-08-21 09:29:54';