COMMIT DELTA
Содержание раздела
Поддерживается в версиях: 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.
Запрос закрывает открытую (горячую) дельту. Дата и время закрытия дельты могут быть указаны в запросе или установлены системой.
При вызове COMMIT DELTA
система закрывает дельту, только если все операции записи этой дельты завершены. Чтобы закрыть дельту, не дожидаясь завершения всех активных операций дельты, выполните запрос с ключевым словом IMMEDIATE.
Наличие незавершенных операций можно проверить с помощью запроса GET_WRITE_OPERATIONS. Способы обработки незавершенных операций описаны в разделе Управление операциями записи.
Время закрытия дельты указывается с точностью до секунд.
Минимально допустимая разница во времени между закрытием дельт — 1 секунда.
Перед выполнением запроса выберите логическую базу данных, используемую по умолчанию, если она еще не выбрана.
В ответе возвращается:
- объект ResultSet c одной записью, содержащей информацию о дате и времени закрытия дельты, при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
Для дельты устанавливаются следующие дата и время закрытия:
- указанные в запросе, если они указаны и корректны,
- определенные системой, если дата и время не указаны в запросе.
При успешном выполнении запроса дельта закрывается и становится недоступна для изменения.
Последние закрытые дельты можно удалить запросом ERASE DELTA.
Синтаксис
COMMIT DELTA [IMMEDIATE] [SET 'date_time_expression']
Параметры:
Ключевое слово IMMEDIATE
Ключевое слово IMMEDIATE
позволяет закрыть дельту, не дожидаясь завершения всех активных операций записи в этой дельте.
Если ключевое слово указано в запросе, в дельту включаются только операции записи, начатые и выполненные в этой дельте в рамках непрерывного диапазона завершенных операций. Остальные операции — незавершенные и все следующие по номерам за незавершенными — исключаются из дельты и становятся отдельными операциями записи без метки времени. Исключенные операции получают метку времени при закрытии следующей дельты после завершения этих операций.
Для закрытия дельты с ключевым словом IMMEDIATE
все операции, начатые до открытия этой дельты, должны быть завершены.
Если ключевое слово не указано, в дельту включаются все операции записи, начатые и выполненные в этой дельте. В этом случае для закрытия дельты необходимо дождаться завершения всех операций записи в логической БД.
На рисунке ниже показан пример исключения операций записи из дельты при запросе COMMIT DELTA IMMEDIATE
. Операция 2 исключена из дельты, потому что она не завершена на момент закрытия дельты, а операция 3 исключена, потому что она следует за незавершенной операцией и не входит в непрерывный диапазон завершенных операций.
На рисунке ниже показан пример распределения операций записи по дельтам после выполнения запроса COMMIT DELTA IMMEDIATE
.
Ключевое слово SET
Ключевое слово SET
задает метку времени — дату и время закрытия дельты. Если ключевое слово и метка времени не указаны, система устанавливает в качестве метки времени дельты текущее время сервера. См. также параметр date_time_expression.
Ограничения
- Если в запросе указаны дата и время закрытия дельты, они должны быть больше, чем дата и время последней закрытой дельты в логической базе данных.
- Минимально допустимая разница во времени между закрытием дельт — 1 секунда.
- Закрытие дельты недоступно, если есть незавершенные операции записи, начатые до открытия этой дельты.
Дату и время последней закрытой дельты можно узнать с помощью запроса GET_DELTA_OK или GET-метода /datamarts/{datamart}/deltas/latest/ok.
Пример
Закрытие дельты с указанной меткой времени:
COMMIT DELTA SET '2021-03-21 09:29:54'
Закрытие дельты без ожидания незавершенных операций записи:
COMMIT DELTA IMMEDIATE