CHECK_DATA
Содержание раздела
Запрос проверяет идентичность данных логической таблицы во всех СУБД хранилища.
Данные проверяются по дельтам в обратном порядке: с последней закрытой дельты до указанной в запросе (обе дельты включительно). При первом найденном расхождении система останавливает проверку и возвращает сообщение о расхождении в данных.
Запрос не поддерживает проверку логических и материализованных представлений. Идентичность данных представления можно проверить отдельно по каждой дельте запросом 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.
Запрос с перечислением столбцов
Проверка целостности данных столбцов id
, transaction_date
и product_code
таблицы sales
:
CHECK_DATA(marketing.sales, 0, [id, transaction_date, product_code])
На рисунке ниже показан пример ответа на запрос CHECK_DATA
по столбцам таблицы при наличии расхождений: контрольная сумма нулевой дельты в ADB отличается от контрольной суммы в других СУБД.
Запрос с коэффициентом нормализации
Проверка целостности данных некоторых столбцов таблицы sales
с коэффициентом нормализации 100:
CHECK_DATA(marketing.sales, 5, 100, [id, transaction_date, product_code])
На рисунке ниже показан пример ответа на такой запрос.
Порядок проверки данных
Идентичность данных проверяется в следующем порядке:
- В каждой из целевых СУБД:
- Выбираются проверяемые дельты: от указанной в запросе до последней закрытой (обе включительно).
- По каждой дельте выбираются все записи, загруженные в логическую таблицу, которая указана в запросе.
- По каждой дельте — в зависимости от наличия/отсутствия столбцов в запросе — рассчитывается контрольная сумма или количество загруженных записей. Порядок расчета контрольной суммы см. в разделе CHECK_SUM.
- Значения по каждой дельте сравниваются в целевых СУБД.
- Если значение по одной из дельт отсутствует или не соответствует другим, для нее в ответе возвращается сообщение о расхождении в данных. Иначе по всем дельтам возвращаются сообщения об успешной проверке.