Теория и практика DWH: все виды SCD по Кимбаллу

от автора

Ранее в статье «Теория и практика 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

ссылка на оригинал статьи https://habr.com/ru/articles/1073420/