Статьи / Медленно меняющиеся измерения (часть 2)
20.09.2018 г., перевод статьи Ralph Kimball
Владелец хранилища данных должен решить, как реагировать на изменения в описаниях размерных сущностей, таких как «Сотрудник», «Клиент», «Продукт», «Поставщик», «Местоположение» и другие. За 30 лет изучения этого вопроса, я обнаружил, что необходимы только три различных типа реакций. Я называл эти медленно меняющиеся размеры (SCD) типами 1, 2 и 3. В прошлой статье, я описал Тип 1 (SCD Type 1), который перезаписывает измененные данные в измерении. В этой статье я разберу типы 2 и 3 (SCD Type 2 и SCD Type 3).
Тип 2 (SCD Type 2): добавление новой записи измерения
Давайте изменим сценарий предыдущей статьи, где я переписал поле «Город проживания» в записи сотрудника Ральфа Кимбалла, и предположим, что Ральф Кимбалл действительно переехал из Санта-Крус в Боулдер-Крик 18 июля 2008 года. Предположим, что наша политика заключается в точном отслеживании домашних адресов сотрудников в хранилище данных. Это классическое изменение SCD Type 2.
SCD Type 2 требует, чтобы мы выпустили новую запись сотрудника для Ральфа Кимбалла с 18 июля 2008 года. Это имеет много интересных побочных эффектов:
- SCD Type 2 требует, чтобы мы обобщили первичный ключ измерения «Сотрудник». Если естественный ключ сотрудника Ральфа Кимбалла – G446, то этот естественный ключ будет «клеем», который держит несколько записей Ральфа Кимбалла вместе. Не рекомендуется создавать интеллектуальный первичный ключ для SCD Type 2, содержащий литеральный естественный ключ. Проблемы с интеллектуальными ключами становятся особенно очевидными, если вы интегрируете несколько несовместимых систем управления персоналом с разным образом отформатированными естественными ключами. Вместо этого следует создать полностью искусственные первичные ключи, которым просто последовательно присваиваются целые числа. Мы называем эти ключи суррогатными. При обработке изменения SCD Type 2 в измерении необходимо создать новый суррогатный первичный ключ.
- В дополнение к основному суррогатному ключу я рекомендую добавить пять дополнительных полей в измерение, которое проходит обработку SCD Type 2. Datetimes – это метки полного времени, представляющие промежуток времени между моментом вступления изменения в силу и моментом вступления в силу следующего изменения. The end-effective-datetime SCD Type 2 запись измерения должна быть точно равна begin-effective-datetime для этого элемента измерения. Самая последняя запись измерения должна иметь end-effective-datetime, равную фиктивному datetime в будущем. Текст причины изменения должен быть взят из заранее запланированного списка причин изменения, в нашем примере – в атрибутах сотрудника. Наконец, current-flag позволяет быстро изолировать именно тот набор элементов измерения, который действует в момент запроса. Эти пять административных полей позволяют конечным пользователям и приложениям выполнять множество эффективных запросов.
- С измерением, проходящим обработку SCD Type 2, необходимо соблюдать большую осторожность, чтобы использовать правильные актуальные суррогатные ключи из этого измерения в каждой затронутой таблице фактов. Процесс извлечения, преобразования и загрузки (ETL) для согласования таблиц измерений с таблицами фактов во время загрузки называется суррогатным ключевым конвейером и подробно рассматривается в моих статьях и книгах.
Тип 3 (SCD Type 3): Добавление нового поля
Хотя SCDs типа 1 и 2 являются основными методами, так сказать «рабочей лошадкой» для реагирования на изменения в измерении, нам нужен третий метод для обработки альтернативных реальностей. В отличие от физических атрибутов, которые могут иметь только одно значение в определенный момент времени, некоторые пользовательские атрибуты могут иметь несколько назначенных значений в зависимости от точки зрения наблюдателя. Например, категория продуктов может иметь несколько интерпретаций. В канцелярском магазине маркировочная ручка может быть отнесена к категории товаров для дома или к категории художественных принадлежностей. Конечные пользователи и приложения должны иметь возможность выбирать во время запроса, какая из этих альтернативных реальностей применяется.
Требование альтернативного представления реальности атрибута измерения обычно сопровождается такой тонкостью, как требование, чтобы отдельные версии реальности были доступны в любое время в прошлом и в будущем, даже несмотря на то, что запрос сделать эти реальности видимыми прибыл в хранилище данных сегодня.
В простейшем варианте есть только одна альтернативная реальность. В этом случае, для примера категории продуктов мы добавим новое поле в измерение, называемое альтернативной категорией. Если основная категория нашей маркировочной ручки раньше была бытовыми товарами, а теперь должна быть художественными принадлежностями, то используя метод SCD Type 3 мы добавляем ярлык бытовых товаров в поле альтернативной категории, и обновляем обычное поле категории «художественные принадлежности» путем перезаписи. Шаг перезаписи похож на SCD Type 1 и обладает все теми же недостатками и достоинствами, отмеченными в предыдущей статье.
Используя SCD Type 3, конечные пользователи и приложения могут плавно переключаться между разными альтернативными реальностями. Если среда требует более одной альтернативной реальности, этот подход можно обобщить, добавив больше альтернативных полей, хотя очевидно, что этот метод не подходит для корректного масштабирования за пределами нескольких вариантов.
Три метода SCD в обработке разницы во времени в измерениях обладают большой вариативностью в реальных ситуациях, которые возникают при работе с хранилищем данных. SCD Type 2, в частности, позволяет нам при необходимости неукоснительно выполнять законодательно прописанные обязательства хранилища данных по ведению журналов вносимых изменений и сохранению истории.