title background

Статьи / Медленно меняющиеся измерения (часть 1)

17.09.2018 г., перевод статьи Ralph Kimball

Понятие времени пронизывает каждый уголок хранилища данных. Большинство фундаментальных мер, которые мы храним в наших таблицах фактов, являются временными рядами, которые мы тщательно аннотируем метками времени и внешними ключами, соединяющимися с измерениями календарных дат. Но эффект времени не ограничивается только временными метками активностей. Все другие измерения, связанные с таблицами фактов, включая фундаментальные сущности, такие, как «Клиент», «Продукт», «Услуга», «Условия», «Местоположение» и «Сотрудник», также зависят от времени.

Как администраторы хранилищ данных, мы регулярно сталкиваемся с откорректированными описаниями этих объектов. Иногда откорректированное описание просто исправляет ошибку в данных. Но часто оно представляет собой настоящее изменение в определенный момент времени какого-либо элемента, например, «Клиента» или «Продукта». Поскольку эти изменения поступают неожиданно, от случая к случаю, и гораздо реже, чем изменения в таблице фактов, мы называем этот раздел – разделом медленно меняющихся измерений (SCDs).

Три типа

Удивительно, но за более чем 30 лет изучения временной дисперсии измерений, я обнаружил, что хранилище данных нуждается только в трех основных реакциях, когда сталкивается с откорректированным или обновленным описанием элемента измерения. Я называю их, соответственно, тип 1, 2 и 3. В этой статье я хочу рассмотреть 1-ый тип. Для того, чтобы обсуждение не было слишком абстрактным я буду использовать измерение «Сотрудник».

Тип 1: Перезапись (SCD Type 1)

Предположим, нас уведомляют, что поле «Город проживания» для Ральфа Кимбалла в измерении «сотрудник» изменилось с Санта-Круз на Боулдер-Крик. Кроме того, нам сообщают, что это исправление ошибки, а не фактическое изменение местоположения. В этом случае, мы можем принять решение перезаписать поле «Город проживания» в измерении «сотрудник» новым значением. Это классическое изменение Type 1 SCD. Изменения Type 1 SCD подходят для исправления ошибок и ситуаций, когда отслеживание истории осознанно игнорируется. Большинство хранилищ данных начинаются с Type 1 SCD по умолчанию.

В то время как Type 1 SCD является самым простым и, казалось бы, самым аккуратным изменением, есть ряд тонких моментов, о которых нужно подумать:

  1. Type 1 SCD уничтожает журнал истории определенного поля. В нашем примере отчеты, ограничивающие или группирующие поле «Город проживания», изменятся. Конечные пользователи должны знать, что это может произойти. Для хранилища данных нужна явная видимая политика для полей Type 1 SCD, в которой говорится: «Мы исправим ошибки» и/или «Мы не сохраняем историю в этом поле, даже если она изменяется».
  2. Предварительно вычисленные агрегаты (включая материализованные представления и автоматические сводные таблицы), зависящие от поля «Город проживания», должны быть переведены в автономный режим в момент перезаписи и повторно вычислены перед возвратом в оперативный режим. Агрегаты, не зависящие от поля «Город проживания», не затрагиваются.
  3. В среде финансовой отчетности с процессами закрытия на конец месяца и в любой среде, соответствующей нормативным и правовым требованиям, изменения Type 1 SCD могут противоречить существующему законодательству. В этих случаях необходимо использовать метод типа 2 (SCD Type 2).
  4. Перезапись одного поля измерения в реляционной среде оказывает довольно небольшое влияние, но может иметь катастрофические последствия в среде интерактивной аналитической обработки (OLAP), если перезапись приводит к перестроению Куба. Внимательно изучите справочное руководство системы OLAP, чтобы узнать, как избежать непредвиденных перестроений Куба.
  5. Все распределенные на предприятии копии измерения «сотрудник», а также агрегаты, при изменении Type 1 SCD должны обновляться одновременно, иначе логика детализации будет повреждена. В распределенной среде изменения Type 1 SCD (и SCD Type 3) должны привести к обновлению номера версии измерения, а все кросс-детализированные приложения должны включать номер версии измерения в свои запросы. Этот процесс был подробно описан в моих статьях, посвященных архитектуре интегрированного корпоративного хранилища данных.
  6. В простом измерении Type 1 SCD, где все поля подлежат перезаписи, изменение Type 1 SCD, например, изменение города проживания для Ральфа Кимбалла, обычно влияет только на одну запись (запись для Ральфа Кимбалла). Но в более сложной среде, где некоторые поля имеют Type 1 SCD, а другие – SCD Type 2, акт перезаписи поля «Город проживания» должен перезаписать все записи для Ральфа Кимбалла. Другими словами, Type 1 SCD влияет на всю историю, а не только на текущую перспективу.

В следующей статье, посвященной медленно меняющимся измерениям, вместо того, чтобы реагировать на изменения перезаписью, я буду тщательно отслеживать изменения, выпуская новую запись измерения. Это классический Type 2 SCD. И, наконец, я покажу, как обрабатывать запрошенное изменение, которое устанавливает альтернативную реальность, которая сосуществует с текущей. Это Type 3 SCD.