COMMIT DELTA

Содержание раздела
  1. Синтаксис
    1. Ключевое слово IMMEDIATE
    2. Ключевое слово SET
  2. Ограничения
  3. Пример

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

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

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

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

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

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

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

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

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

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

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

  • delta_num — номер дельты;
  • delta_date — дата и время закрытия дельты;
  • cn_from — первая операция в диапазоне операций записи, выполненных в дельте;
  • cn_to — последняя операция в диапазоне операций записи, выполненных в дельте.

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

Последние закрытые дельты можно удалить запросом ERASE DELTA.

Синтаксис

COMMIT DELTA [IMMEDIATE] [SET 'date_time_expression']

Параметры:

date_time_expression

Метка времени дельты в формате 'YYYY-MM-DD hh:mm:ss'.

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

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

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

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

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

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

Пример работы COMMIT DELTA IMMEDIATE: запрос включил в дельту операции 0-1 и исключил из дельты операции 2-3

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

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