CHECK_SUM

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

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

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

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

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

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

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

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

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

Синтаксис

CHECK_SUM(delta_num[, normalization][, [db_name.]entity_name[, square-bracketed_column_list]])

Параметры:

  • delta_num — номер открытой (горячей) или закрытой дельты, в которой рассчитывается контрольная сумма таблицы, представления или логической БД. Если других аргументов в запросе нет, контрольная сумма рассчитывается по всем логическим таблицам логической БД;
  • normalization (опциональный) — коэффициент, который повышает максимально допустимое количество записей таблицы (или представления) в дельте, но снижает уникальность контрольных сумм. Может принимать любое положительное целочисленное значение, начиная с 1. Значение по умолчанию — 1. Если коэффициент не указан или равен 1, проверяемая таблица (представление) может содержать до 4'294'967'298 записей в дельте; при увеличении коэффициента допустимое количество записей увеличивается пропорционально. Если количество записей какой-либо таблицы (или представления) в дельте больше допустимого, в ответе возвращается исключение;
  • entity_name (опциональный) — имя логической таблицы или материализованного представления, по которым рассчитывается контрольная сумма;
  • square-bracketed_column_list (опциональный) — список имен столбцов указанной таблицы или представления, по которым рассчитывается контрольная сумма. Элементы списка перечисляются внутри квадратных скобок через запятую. Если список столбцов не указан, контрольная сумма рассчитывается по всем столбцам логической таблицы или материализованного представления.

Ограничения

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

Примеры

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

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

CHECK_SUM(10,sales.sales,[id, transaction_date, product_code])

На рисунках ниже показаны примеры ответов на запрос CHECK_SUM с перечислением столбцов: на первом — ответ при отсутствии расхождений в данных между СУБД хранилища, на втором — ответ при наличии расхождений.

Ответ CHECK_SUM по указанным столбцам таблицы при отсутствии расхождений

Ответ CHECK_SUM при наличии расхождений

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

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

CHECK_SUM(10,sales.sales)

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

Ответ CHECK_SUM по логической таблице

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

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

CHECK_SUM(10,sales.sales_by_stores)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример расчета контрольной суммы по таблице

Рассмотрим пример расчета контрольной суммы по таблице sales в дельте, содержащей две операции записи. Для простоты примера по каждой из записей возьмем заранее рассчитанную 32-битную контрольную сумму: 165074672 (см. пример расчета в разделе CHECK_DATA) и 87891666.

Контрольная сумма таблицы равна 165074672 + 87891666 = 252966338.