CHECK_DATA
Содержание раздела
Поддерживается в версиях: 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 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.
Запрос проверяет целостность изменений данных, внесенных в логическую таблицу с указанной дельты по последнюю закрытую дельту.
Проверка может давать ложноположительный результат. Чтобы снизить частоту ложных срабатываний, рекомендуется включать первичный ключ в список проверяемых столбцов.
Поддерживаемые сущности
Запрос поддерживает проверку обычных логических таблиц и партиций. Для партиционированных таблиц всегда возвращается сообщение об отсутствии расхождений.
Чтобы проверить целостность данных в логическом и материализованном представлении, выполните CHECK_SUM отдельно по каждой дельте: если запрос вернул контрольную сумму, а не ошибку, это означает, что в данных дельты нет расхождений.
Особенности проверки значений с плавающей точкой
Значения с типами FLOAT и DOUBLE могут иметь разные контрольные суммы из-за разницы в точности типов. Чтобы избежать расхождения в контрольных суммах, используйте любой из способов:
- используйте тип
DOUBLEдля всех значений с плавающей точкой (он больше распространен среди СУБД, чемFLOAT); - исключайте столбцы типа
FLOATиDOUBLEиз запросовCHECK_DATA.
Как работает запрос
Изменения проверяются по дельтам в обратном порядке: с последней закрытой до указанной в запросе (обе дельты включительно).
По каждой дельте в каждом датасорсе система рассчитывает контрольную сумму записей, которые были загружены и обновлены в логической таблице в этой дельте и операциях записи, выполненных вне дельты между проверяемой дельтой и предыдущей к ней. Рассчитанные контрольные суммы сравниваются по дельтам между датасорсами. При первом найденном расхождении, если такое есть, проверка останавливается, и возвращается сообщение о расхождении в данных.
В проверке участвуют все включенные датасорсы, в которых хранятся данные логической таблицы. Если такой датасорс один, проверка все равно проходит и считается успешной. Отключенные датасорсы пропускаются при проверке без возврата ошибки и не отображаются в результатах проверки.
Подробнее о порядке проверки см. в секции Порядок проверки данных, о расчете контрольной суммы — в разделе CHECK_SUM.
Синтаксис
CHECK_DATA([db_name.]table_name, delta_number[, normalization][, square_bracketed_column_list])
Параметры:
db_name-
Имя логической базы данных, которой принадлежит проверяемая логическая таблица. Опционально, если выбрана логическая БД, используемая по умолчанию.
table_name-
Имя проверяемой логической таблицы.
delta_number-
Номер дельты, с которой проверяются данные. Номер должен быть меньше или равен номеру последней закрытой дельты.
Номер последней закрытой дельты можно получить запросом GET_DELTA_OK или GET-методом /datamarts/{datamart}/deltas/latest/ok.
normalization-
Опциональный коэффициент, который повышает лимит на количество проверяемых записей, но снижает уникальность контрольных сумм. Может принимать любое целое значение, начиная с 1. Значение по умолчанию — 1.
Если коэффициент не указан или равен 1, запрос может проверить до
4'294'967'298измененных (добавленных и удаленных) записей в дельте; при увеличении коэффициента лимит увеличивается пропорционально. square_bracketed_column_list-
Опциональный список проверяемых столбцов таблицы. Элементы списка указываются в квадратных скобках через запятую, например
[id, transaction_date].Если столбцы не указаны, система проверяет контрольную сумму записей по всем столбцам таблицы.
Варианты ответа
В ответе возвращается:
- объект ResultSet с результатом проверки при успешном выполнении запроса. Результат — это одна строка со списком проверенных дельт, где для каждой дельты указано сообщение об успешной проверке или найденном расхождении;
- исключение при неуспешном выполнении запроса.
Ограничения
Ограничения сущностей
- Недоступна проверка партиционированных таблиц, а также логических и материализованных представлений.
- Максимальное количество проверяемых записей в одной сущности ограничено и регулируется коэффициентом нормализации.
Ограничения точности
- Есть небольшая вероятность, что контрольные суммы совпадут для разных наборов данных, поэтому возможен ложноположительный результат проверки.
- Значения типа
FLOATиDOUBLEмогут приводить к расхождениям при проверке из-за разницы в точности типов.
Другие ограничения
- Недоступна проверка изменений, внесенных операциями записи после последней закрытой дельты.
- При обработке запроса отключенные (Датасорс, отключенный системой из-за сбоя или администратором
) датасорсы (СУБД или кластер СУБД хранилища
) пропускаются без возврата ошибки. Ошибка возвращается, если не осталось ни одного включенного (Датасорс, работающий в штатном режиме
) датасорса, подходящего для исполнения запроса.
Примеры
Запрос без перечисления столбцов
Проверка целостности изменений данных в логической таблице sales_july_2021, начиная с дельты 0:
CHECK_DATA(marketing.sales_july_2021, 0)
На рисунке ниже показан пример ответа CHECK_DATA при успешной проверке логической таблицы sales_july_2021, данные которой размещены в одном датасорсе.
Ответ CHECK_DATA с проверкой в одном датасорсе
Запрос с перечислением столбцов
Проверка целостности изменений данных в трех столбцах таблицы 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 с коэффициентом нормализации
Порядок проверки данных
Целостность изменений данных проверяется так:
- В каждом из включенных целевых датасорсов по каждой дельте, начиная с последней закрытой до указанной в запросе (обе включительно), выполняются действия:
- Выбираются записи логической таблицы, которые были загружены и (или) обновлены в дельте и операциях записи, выполненных между этой дельтой и предшествующей ей.
- Рассчитывается контрольная сумма по выбранным записям. Порядок расчета контрольной суммы см. в разделе CHECK_SUM.
- Значения по каждой дельте сравниваются между включенными целевыми датасорсами.
- Возвращается результат проверки:
- Если какая-либо контрольная сумма отсутствует в одном из датасорсов или не соответствует суммам в других датасорсах, проверка останавливается и в ответе возвращается информация обо всех проверенных дельтах и о расхождении в последней проверенной дельте.
- Иначе в ответе возвращается информация об успешной проверке по каждой проверенной дельте.
