Ранее в статье «Теория и практика DWH: что такое согласованные факты и измерения по Кимбаллу и зачем они нужны» разбирали:

  • кто такой Кимбалл

  • каков его подход

  • что такое измерения

Теперь разберём медленно меняющиеся измерения – slowly changing dimensions. Для начала разберём контекст – что пишет сам Кимбалл про SCD:

цитаты из книги Кимбалла в русском переводе
цитаты из книги Кимбалла в русском переводе

В книге Кимбалла упоминается, что:

  • типы SCD описаны от простого к сложному

  • много раз повторяется мысль про простоту/понятность как важную часть подхода

Что, если развить эту мысль и расположить все типы SCD на одной шкале?

Задаём шкалу:

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

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

Как типы SCD отвечают на поставленные перед ними вопросы – посмотрим детально по каждому типу.

И сразу договоримся - далее мы будем рассматривать измерение "пользователь" (user). Чтобы изменения в данных были понятны, возьмём для примера Того-Кого-Нельзя-Называть. Сначала это был мальчик (Том Реддл), а кем он стал потом - подскажут воспоминания из детства (и примеры SCD).

SCD 0

Сохранение оригинала

пример SCD 0
пример SCD 0

При этом типе SCD то, что попало к нам в DWH, остаётся таковым без изменений.

На вопрос "быть или не быть изменениям?" SCD 0 отвечает: "не быть".

цитата из книги Кимбалла в русском переводе про SCD 0
цитата из книги Кимбалла в русском переводе про SCD 0

SCD 1

Перезапись

пример SCD 1
пример SCD 1

При этом типе SCD то, что используется в DWH, перезаписывается, т.е. имеет последнее актуальное значение.

На вопрос "быть или не быть изменениям?" SCD 1 отвечает: "быть".

Но при этом и SCD 0, и SCD 1 не фиксируют историю изменений.

цитата из книги Кимбалла в русском переводе про SCD 1
цитата из книги Кимбалла в русском переводе про SCD 1

SCD 2

Добавление новой строки

пример SCD 2
пример SCD 2

Начиная с этого типа начинается отслеживание истории изменений.

На вопрос "что добавлять?" SCD 2 отвечает: "строку".

При этом для использования SCD 2 в таблице измерений нужны дополнительные столбцы, по которым можно определить статус/период актуальности строки.

цитата из книги Кимбалла в русском переводе про SCD 2
цитата из книги Кимбалла в русском переводе про SCD 2

SCD 3

Добавление нового атрибута

пример SCD 3
пример SCD 3

На вопрос "что добавлять?" SCD 3 отвечает: "столбец" ( = атрибут).

При данном типе для одной строки измерения мы можем видеть одновременно два значения.

цитата из книги Кимбалла в русском переводе про SCD 3
цитата из книги Кимбалла в русском переводе про SCD 3

SCD 4

Добавление мини-измерения

пример SCD 4
пример SCD 4

На вопрос "что добавлять?" SCD 4 отвечает: "таблицу".

В данном контексте у нас есть
- измерение (таблица),
и мы добавляем
- мини-измерение (ещё одну отдельную таблицу)

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

Последуем идеям Кимбалла из книги, и SCD 4 рассмотрим на примере демографических данных:
- основное измерение - dim_user
- мини-измерение - dim_user_demography

Чтобы понять детально, предположим, мы онлайн-кинотеатр. В таблице фактов (fct_playback_session) мы через ключи измерения и мини-измерения сможем получить полную картину данных:

пример SCD 4 детально
пример SCD 4 детально

При этом мы снимаем с себя головную боль от "распухания" таблицы измерений от частого изменения атрибутов. Вот что об этом пишет сам Кимбалл:

цитата из книги Кимбалла в русском переводе про SCD 4
цитата из книги Кимбалла в русском переводе про SCD 4

Осторожно: далее идут гибридные типы SCD.
Они более сложные и реже используются на практике:

  • если вы хотите получить полное представление о них, можно погрузиться в примеры

  • если же вам нужна общая картина - можете переходить сразу к разделу Все типы SCD на шкале в конце обзора

SCD 5

Добавление мини-измерения и внешней опоры типа 1

пример SCD 5
пример SCD 5

На вопрос "что составлять?" SCD 5 отвечает: "4 + 1".

То есть мы берём за основу SCD 4 (добавление мини-измерения) + добавляем SCD 1 (перезапись).

Если в SCD 4 мы просто добавляли отдельную таблицу, то в SCD 5 мы точно так же добавляем отдельную таблицу, но при этом ещё связываем её с основным измерением.

пример SCD 5 детально
пример SCD 5 детально

В результате в SCD 5 мы можем видеть полную картину данных не только через таблицу фактов, но и через само измерение:

пример SCD 5 детально (без таблицы фактов)
пример SCD 5 детально (без таблицы фактов)

При этом важно понимать, что SCD 5 - это уже гибридный тип, который комбинирует ранее разобранные более простые типы, и к нему надо относиться с осторожностью (чтобы не запутать пользователя). Вот как пишет об этом Кимбалл:

цитата из книги Кимбалла в русском переводе про SCD 5
цитата из книги Кимбалла в русском переводе про SCD 5

SCD 6

Добавление атрибута типа 1 к измерению типа 2

пример SCD 6
пример SCD 6

На вопрос "что составлять?" SCD 6 отвечает: "3 + 1 + 2".

То есть мы добавляем атрибут (SCD 3) типа 1 (SCD 1) к измерению типа 2 (SCD 2). Здесь мы видим полную картину данных в самом измерении (без использования таблицы фактов).

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

цитата из книги Кимбалла в русском переводе про SCD 6
цитата из книги Кимбалла в русском переводе про SCD 6

SCD 7

Двойные измерения типа 1 и типа 2

пример SCD 7
пример SCD 7

На вопрос "что составлять?" SCD 7 отвечает, не используя предшествующие типы.
SCD 7 использует:
- измерение, отслеживающее историю (table, SCD 2)
- измерение вечно актуальное (view, SCD 1)

При этом технически есть два способа интеграции с таблицей фактов:
- используя один и тот же ключ
- используя два разных ключа
(впрочем, как видно на примерах, в итоге картина данных не отличается)

пример SCD 7 с одним ключом
пример SCD 7 с одним ключом
пример SCD 7 с двумя ключами
пример SCD 7 с двумя ключами
цитата из книги Кимбалла в русском переводе про SCD 7
цитата из книги Кимбалла в русском переводе про SCD 7

Все типы SCD на шкале

Итак, мы разобрали все виды SCD.
Время взглянуть на заполненную шкалу:

все типы SCD на шкале от простого к сложному
все типы SCD на шкале от простого к сложному

Дополним эту шкалу тем, как были описаны эти подходы:
- что сам Кимбалл отмечает как базовые подходы (ссылка 1)
- что как дополнительные (ссылка 2)
В качестве источника в этот раз обратимся к сайту kimballgroup.com

цитаты с сайта kimballgroup.com
цитаты с сайта kimballgroup.com

а также дополним шкалу общим пониманием распространённости подходов на практике:

все виды SCD
все виды SCD

Комментарии (0)