Link Search Menu Expand Document

CHECK_SUM_SNAPSHOT

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

Запрос позволяет рассчитать контрольную сумму актуальных данных на момент закрытия указанной дельты.

Запрос поддерживается для ADB, ADQM и ADP.

Контрольную сумму можно рассчитать по следующим данным:

Контрольная сумма рассчитывается по каждой СУБД хранилища, которая хранит данные проверяемой логической сущности. Порядок расчета описан ниже.

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

Чтобы рассчитать контрольную сумму по изменениям данных, а не актуальным данным, используйте запрос CHECK_SUM.

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

  • объект ResultSet с контрольной суммой при успешном выполнении запроса и отсутствии расхождений между СУБД хранилища;
  • исключение при наличии расхождений или неуспешном выполнении запроса.

Если контрольные суммы различаются между СУБД хранилища, система возвращает исключение Consistency breach detected for <entity_name>. Исключение содержит список контрольных сумм по всем проверенным СУБД. При расчете контрольной суммы по логической базе данных система возвращает исключение по первому найденному расхождению и не проверяет следующие сущности.

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

Синтаксис

CHECK_SUM_SNAPSHOT(delta_num[, normalization][, [db_name.]entity_name[, square_bracketed_column_list]])

Параметры:

delta_num

Номер дельты, на момент закрытия которой рассчитывается контрольная сумма актуальных данных.

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

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

entity_name

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

square_bracketed_column_list

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

Ограничения

  • Контрольная сумма логической базы данных рассчитывается только по данным логических таблиц и не учитывает данные материализованных представлений.
  • Существует вероятность совпадения контрольных сумм для разных наборов данных.
  • Количество проверяемых записей в одной сущности ограничено и регулируется коэффициентом нормализации. Если количество актуальных записей какой-либо сущности в указанной дельте больше 4'294'967'298, нужно подобрать подходящее значение коэффициента нормализации.

Примеры

Запрос по отдельным столбцам логической таблицы

Расчет контрольной суммы по трем столбцам таблицы basic_stores_table в седьмой дельте:

CHECK_SUM_SNAPSHOT(7,marketing.basic_stores_table,[id, category, region])

На рисунке ниже показан пример ответа на запрос CHECK_SUM_SNAPSHOT с перечислением столбцов таблицы.

Ответ CHECK_SUM_SNAPSHOT по отдельным столбцам таблицы

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

Расчет контрольной суммы по всей таблице basic_stores_table в седьмой дельте:

CHECK_SUM_SNAPSHOT(7,marketing.basic_stores_table)

На рисунке ниже показан пример ответа на запрос CHECK_SUM_SNAPSHOT по логической таблице при наличии расхождений.

Ответ CHECK_SUM_SNAPSHOT по логической таблице при наличии расхождений

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

Расчет контрольной суммы по всему материализованному представлению sales_by_stores в седьмой дельте:

CHECK_SUM_SNAPSHOT(7,marketing.sales_by_stores)

Запрос по логической базе данных

Расчет контрольной суммы по всем таблицам логической базы данных marketing_new в нулевой дельте:

-- выбор логической базы данных marketing_new в качестве базы данных по умолчанию
USE marketing_new;

-- расчет контрольной суммы логической БД
CHECK_SUM_SNAPSHOT(0);

На рисунке ниже показан пример ответа на запрос CHECK_SUM_SNAPSHOT по логической базе данных.

Ответ CHECK_SUM_SNAPSHOT по логической базе данных

Запрос по логической базе данных с коэффициентом нормализации

Расчет контрольной суммы по всем таблицам логической базы данных marketing_new с коэффициентом нормализации, равным 100:

-- выбор логической базы данных marketing_new в качестве базы данных по умолчанию
USE marketing_new;

-- расчет контрольной суммы логической БД с указанным коэффициентом нормализации
CHECK_SUM_SNAPSHOT(7, 100);

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

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

Порядок расчета контрольных сумм

Расчет контрольной суммы по логической таблице или материализованному представлению

Контрольная сумма логической таблицы или материализованного представления рассчитывается, как описано в разделе CHECK_DATA, с тем отличием, что контрольные суммы в шаге 1 рассчитываются не по записям, загруженным в дельте, а записям, актуальным на момент закрытия дельты.

Расчет контрольной суммы по логической базе данных

Контрольная сумма логической базы данных рассчитывается так:

  1. По каждой логической таблице логической базы данных рассчитывается контрольная сумма (см. выше).
  2. Контрольные суммы всех логических таблиц суммируются — получается 64-битная контрольная сумма логической базы данных.