COMMIT DELTA
Содержание раздела
Поддерживается в версиях: 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 исключается, потому что она следует за незавершенной операцией и не входит в непрерывный диапазон завершенных операций.
На рисунке ниже показан пример распределения операций записи по дельтам при выполнении запроса 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';