CHECK_DATA

Содержание раздела
  1. Синтаксис
  2. Ограничения
    1. Ограничения сущностей
    2. Ограничения точности
    3. Другие ограничения
  3. Примеры
    1. Запрос без перечисления столбцов
    2. Запрос с перечислением столбцов
    3. Запрос с коэффициентом нормализации
  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 отдельно по каждой дельте: если запрос вернул контрольную сумму, а не ошибку, это означает, что в данных нет расхождений.

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

В проверке участвуют все датасорсы, в которых хранятся данные логической таблицы. Если такой датасорс один, проверка все равно проходит и считается успешной. Подробнее о порядке проверки см. в секции Порядок проверки данных, о расчете контрольной суммы — в разделе 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, данные которой размещены в одном датасорсе.

Ответ 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 с коэффициентом нормализации

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

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

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