CHECK_DATA
Содержание раздела
Поддерживается в версиях: 6.2 / 6.1.1 / 6.0 / 5.8 / 5.7 / 5.6.1 / 5.5 / 5.4 / 5.3 / 5.2 / 5.1 / 5.0.
Запрос проверяет целостность изменений данных, внесенных в логическую таблицу с указанной дельты по последнюю закрытую дельту.
Запрос не поддерживает проверку логических и материализованных представлений. Целостность данных представления можно проверить, выполнив 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 или GET-методом /datamarts/{datamart}/deltas/latest/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
, данные которой размещены в одном датасорсе.
Запрос с перечислением столбцов
Проверка целостности изменений данных в трех столбцах таблицы 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.
- Значения, рассчитанные по каждой дельте, сравниваются между целевыми датасорсами.
- Если одно из значений отсутствует или не соответствует другим, для соответствующей дельты в ответе возвращается сообщение о расхождении в данных. Иначе для всех дельт возвращаются сообщения об успешной проверке.