COMMIT DELTA

Содержание раздела
  1. Обработка незавершенных операций
  2. Результат выполнения
  3. Синтаксис
    1. Ключевое слово IMMEDIATE
      1. Пример работы COMMIT DELTA IMMEDIATE
    2. Ключевое слово SET
  4. Варианты ответа
    1. Параметры ответа
  5. Ограничения
  6. Пример

Поддерживается в версиях:  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.

Запрос закрывает открытую дельту.

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

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

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

Обработка незавершенных операций

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

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

Результат выполнения

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

Для дельты устанавливаются дата и время закрытия:

  • указанные в запросе, если они указаны и корректны,
  • определенные системой, если дата и время не указаны в запросе.

Синтаксис

COMMIT DELTA [IMMEDIATE] [SET 'date_time_expression']

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

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

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

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

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

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

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

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

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

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

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

Ключевое слово SET задает дату и время закрытия дельты date_time_expression.

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

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

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

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

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

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

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

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

Ограничения

  • Если в запросе указаны дата и время закрытия дельты, они должны быть больше даты и времени последней закрытой дельты в логической БД.
  • Минимально допустимая разница во времени между закрытием дельт — 1 секунда.
  • Закрытие дельты без ключевого слова 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';