CHECK_DATA

Содержание раздела
  1. Синтаксис
  2. Ограничения
    1. Ограничения сущностей
    2. Ограничения точности
  3. Примеры
    1. Запрос без перечисления столбцов
    2. Запрос с перечислением столбцов
    3. Запрос с коэффициентом нормализации
  4. Порядок проверки данных

Запрос проверяет идентичность данных логической таблицы во всех СУБД хранилища.

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

Запрос не поддерживает проверку логических и материализованных представлений. Идентичность данных представления можно проверить отдельно по каждой дельте запросом CHECK_SUM: если запрос вернул контрольную сумму, а не ошибку, это означает, что в данных нет расхождений.

Порядок проверки зависит от параметров запроса:

  • если указаны столбцы к проверке, система сверяет контрольные суммы загруженных записей в каждой дельте;
  • иначе — система сверяет количество загруженных записей в каждой дельте.

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

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

  • объект ResultSet с результатом проверки при успешном выполнении запроса. Результат — это одна строка со списком проверенных дельт, где для каждой из дельт указано сообщение об успешной проверке или найденном расхождении;
  • исключение при неуспешном выполнении запроса.

Значения типа FLOAT и DOUBLE могут приводить к расхождениям при проверке из-за разницы в точности типов. Чтобы избежать таких расхождений, используйте для всех значений с плавающей точкой тип DOUBLE (как более распространенный среди СУБД) или исключайте столбцы типа FLOAT и DOUBLE из запросов CHECK_DATA.

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

Синтаксис

CHECK_DATA([db_name.]table_name, delta_number[, normalization][, square_bracketed_column_list])

Параметры:

db_name

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

table_name

Имя проверяемой логической таблицы.

delta_number

Номер дельты, с которой начинается проверка. Должен быть меньше или равен номеру последней закрытой дельты. Номер последней закрытой дельты можно узнать с помощью запроса GET_DELTA_OK.

normalization

Опциональный коэффициент, который повышает лимит на количество проверяемых записей в одной сущности, но снижает уникальность контрольных сумм. Может принимать любое целое значение, начиная с 1. Значение по умолчанию — 1.
Если коэффициент не указан или равен 1, проверяемая сущность может содержать до 4'294'967'298 измененных (добавленных и удаленных) записей в дельте; при увеличении коэффициента лимит увеличивается пропорционально.

square_bracketed_column_list

Опциональный список проверяемых столбцов таблицы. Элементы списка указываются в квадратных скобках через запятую, например [id, transaction_date].
Если столбцы указаны, система проверяет контрольную сумму записей, иначе — количество записей.

Ограничения

Ограничения сущностей

  • Проверка логических и материализованных представлений недоступна.
  • Максимальное количество проверяемых записей в одной сущности ограничено и регулируется коэффициентом нормализации.

Ограничения точности

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

Примеры

Запрос без перечисления столбцов

Проверка целостности данных логической таблицы sales_july_2021 в диапазоне [дельта 0, последняя закрытая дельта]:

CHECK_DATA(marketing.sales_july_2021, 0)

На рисунке ниже показан пример ответа CHECK_DATA при успешной проверке логической таблицы sales_july_2021, данные которой размещены только в ADB.

Ответ CHECK_DATA с проверкой только в ADB

Запрос с перечислением столбцов

Проверка целостности данных столбцов id, transaction_date и product_code таблицы sales:

CHECK_DATA(marketing.sales, 0, [id, transaction_date, product_code])

На рисунке ниже показан пример ответа CHECK_DATA по столбцам таблицы при наличии расхождений: контрольная сумма нулевой дельты в ADB отличается от контрольной суммы в других СУБД.

Ответ CHECK_DATA с расхождениями

Запрос с коэффициентом нормализации

Проверка целостности данных некоторых столбцов таблицы sales с коэффициентом нормализации 100:

CHECK_DATA(marketing.sales, 5, 100, [id, transaction_date, product_code])

На рисунке ниже показан пример ответа на такой запрос.

Запрос CHECK_DATA с коэффициентом нормализации

Порядок проверки данных

Идентичность данных проверяется в следующем порядке:

  1. В каждой из целевых СУБД:
    1. Выбираются проверяемые дельты: от указанной в запросе до последней закрытой (обе включительно).
    2. По каждой дельте выбираются все записи, загруженные в логическую таблицу, которая указана в запросе.
    3. По каждой дельте — в зависимости от наличия/отсутствия столбцов в запросе — рассчитывается контрольная сумма или количество загруженных записей. Порядок расчета контрольной суммы см. в разделе CHECK_SUM.
  2. Значения по каждой дельте сравниваются в целевых СУБД.
  3. Если значение по одной из дельт отсутствует или не соответствует другим, для нее в ответе возвращается сообщение о расхождении в данных. Иначе по всем дельтам возвращаются сообщения об успешной проверке.