
Ранее в статье «Теория и практика DWH: что такое согласованные факты и измерения по Кимбаллу и зачем они нужны» разбирали:
-
кто такой Кимбалл
-
каков его подход
-
что такое измерения
Теперь разберём медленно меняющиеся измерения – slowly changing dimensions. Для начала разберём контекст – что пишет сам Кимбалл про SCD:
В книге Кимбалла упоминается, что:
-
типы SCD описаны от простого к сложному
-
много раз повторяется мысль про простоту/понятность как важную часть подхода
Что, если развить эту мысль и расположить все типы SCD на одной шкале?
Задаём шкалу:

Размещаем на ней все типы SCD:

Типы SCD можно условно разделить на смысловые группы.
При этом каждая из групп отвечает на свой вопрос:

Как типы SCD отвечают на поставленные перед ними вопросы – посмотрим детально по каждому типу.
И сразу договоримся — далее мы будем рассматривать измерение «пользователь» (user). Чтобы изменения в данных были понятны, возьмём для примера Того-Кого-Нельзя-Называть. Сначала это был мальчик (Том Реддл), а кем он стал потом — подскажут воспоминания из детства (и примеры SCD).
SCD 0
Сохранение оригинала
При этом типе SCD то, что попало к нам в DWH, остаётся таковым без изменений.
На вопрос «быть или не быть изменениям?» SCD 0 отвечает: «не быть».
SCD 1
Перезапись
При этом типе SCD то, что используется в DWH, перезаписывается, т.е. имеет последнее актуальное значение.
На вопрос «быть или не быть изменениям?» SCD 1 отвечает: «быть».
Но при этом и SCD 0, и SCD 1 не фиксируют историю изменений.
SCD 2
Добавление новой строки
Начиная с этого типа начинается отслеживание истории изменений.
На вопрос «что добавлять?» SCD 2 отвечает: «строку».
При этом для использования SCD 2 в таблице измерений нужны дополнительные столбцы, по которым можно определить статус/период актуальности строки.
SCD 3
Добавление нового атрибута
На вопрос «что добавлять?» SCD 3 отвечает: «столбец» ( = атрибут).
При данном типе для одной строки измерения мы можем видеть одновременно два значения.
SCD 4
Добавление мини-измерения
На вопрос «что добавлять?» SCD 4 отвечает: «таблицу».
В данном контексте у нас есть
— измерение (таблица),
и мы добавляем
— мини-измерение (ещё одну отдельную таблицу)
Этот тип полезен тогда, когда у измерения есть как
— условно стабильные атрибуты (имя пользователя),
— так и часто изменяемые (возраст, адрес, когда последний раз заходил в сервис и т.д.)
Последуем идеям Кимбалла из книги, и SCD 4 рассмотрим на примере демографических данных:
— основное измерение — dim_user
— мини-измерение — dim_user_demography
Чтобы понять детально, предположим, мы онлайн-кинотеатр. В таблице фактов (fct_playback_session) мы через ключи измерения и мини-измерения сможем получить полную картину данных:
При этом мы снимаем с себя головную боль от «распухания» таблицы измерений от частого изменения атрибутов. Вот что об этом пишет сам Кимбалл:
Осторожно: далее идут гибридные типы SCD.
Они более сложные и реже используются на практике:
-
если вы хотите получить полное представление о них, можно погрузиться в примеры
-
если же вам нужна общая картина — можете переходить сразу к разделу Все типы SCD на шкале в конце обзора
SCD 5
Добавление мини-измерения и внешней опоры типа 1
На вопрос «что составлять?» SCD 5 отвечает: «4 + 1».
То есть мы берём за основу SCD 4 (добавление мини-измерения) + добавляем SCD 1 (перезапись).
Если в SCD 4 мы просто добавляли отдельную таблицу, то в SCD 5 мы точно так же добавляем отдельную таблицу, но при этом ещё связываем её с основным измерением.
В результате в SCD 5 мы можем видеть полную картину данных не только через таблицу фактов, но и через само измерение:
При этом важно понимать, что SCD 5 — это уже гибридный тип, который комбинирует ранее разобранные более простые типы, и к нему надо относиться с осторожностью (чтобы не запутать пользователя). Вот как пишет об этом Кимбалл:
SCD 6
Добавление атрибута типа 1 к измерению типа 2
На вопрос «что составлять?» SCD 6 отвечает: «3 + 1 + 2».
То есть мы добавляем атрибут (SCD 3) типа 1 (SCD 1) к измерению типа 2 (SCD 2). Здесь мы видим полную картину данных в самом измерении (без использования таблицы фактов).
Как и ранее, Кимбалл обращает внимание, что использование гибридного типа может быть сложным, и нужно соблюдать баланс:
SCD 7
Двойные измерения типа 1 и типа 2
На вопрос «что составлять?» SCD 7 отвечает, не используя предшествующие типы.
SCD 7 использует:
— измерение, отслеживающее историю (table, SCD 2)
— измерение вечно актуальное (view, SCD 1)
При этом технически есть два способа интеграции с таблицей фактов:
— используя один и тот же ключ
— используя два разных ключа
(впрочем, как видно на примерах, в итоге картина данных не отличается)
Все типы SCD на шкале
Итак, мы разобрали все виды SCD.
Время взглянуть на заполненную шкалу:
Дополним эту шкалу тем, как были описаны эти подходы:
— что сам Кимбалл отмечает как базовые подходы (ссылка 1)
— что как дополнительные (ссылка 2)
В качестве источника в этот раз обратимся к сайту kimballgroup.com
а также дополним шкалу общим пониманием распространённости подходов на практике:
ссылка на оригинал статьи https://habr.com/ru/articles/1073420/