Выбор между типами медленно изменяющихся измерений
В теории схемы типа "звезда" выделяются основные типы постоянно изменяющихся измерений. Наиболее распространенные типы — это типы 1 и 2. На практике таблица измерения может поддерживать сочетание методов отслеживания исторических значений, включая тип 3 и тип 6. Давайте узнаем, в чем заключается различие между этими типами медленно изменяющихся измерений.
Тип 1 SCD
Медленно изменяющееся измерение типа 1 всегда отражает последние значения. При обнаружении изменений в исходных данных данные в таблице измерения перезаписываются. Этот подход к проектированию распространен для столбцов, в которых хранятся дополнительные значения, например адрес электронной почты или номер телефона клиента. При изменении адреса электронной почты клиента или номера телефона таблица измерений обновляет строку клиента новыми значениями. Это как если бы клиент всегда имел эти контактные данные. Ключевое поле, например CustomerID, не будет изменяться, чтобы записи в таблице фактов автоматически связывались с обновленной записью клиента.
Тип 2 SCD
Медленно изменяющееся измерение типа 2 поддерживает управление версиями для элементов измерения. В системах исходного кода версии часто не хранятся, поэтому процесс загрузки хранилища данных обнаруживает изменения в таблице измерения и управляет ими. В этом случае таблица измерений должна использовать суррогатный ключ для предоставления уникальной ссылки на версию элемента измерения. Он также содержит столбцы, определяющие допустимость диапазона дат версии (например, StartDate
и EndDate
) и, возможно, столбец флага (например, IsCurrent
), чтобы легко фильтровать по текущим элементам измерения.
Например, Adventure Works назначает продавцов региону продаж. При перемещении продавца необходимо создать новую версию продавца, чтобы исторические факты оставались связанными с бывшим регионом. Для поддержки точного исторического анализа продаж продавцом таблица измерений должна хранить версии продавцов и связанные с ними регионы. Таблица также должна содержать значения дат начала и окончания, чтобы определить допустимость времени. Текущие версии могут определять пустую дату окончания (или 12.31.9999), которая указывает на то, что строка является текущей версией. Таблица также должна определить суррогатный ключ, так как бизнес-ключ (в этом экземпляре идентификатор сотрудника) не будет уникальным.
Важно понимать, что если исходные данные не хранят версии, необходимо использовать промежуточную систему (например, хранилище данных) для обнаружения и хранения изменений. Процесс загрузки таблицы должен сохранять существующие данные и обнаруживать изменения. При обнаружении изменения процесс загрузки таблицы должен истекть до текущей версии. Он записывает эти изменения, обновляя EndDate
значение и вставляя новую версию со StartDate
значением, начиная с предыдущего EndDate
значения. Кроме того, связанные факты должны использовать поиск на основе времени для получения значения ключа измерения, относящееся к дате фактов.
Медленно изменяющееся измерение типа 3
Медленно изменяющееся измерение типа 3 поддерживает хранение двух версий элемента измерения в виде отдельных столбцов. Таблица включает столбец для текущего значения элемента, а также столбец для хранения исходного или предыдущего значения элемента. Поэтому в медленно изменяющемся измерении типа 3 дополнительные столбцы используются для отслеживания одного ключевого экземпляра предыдущего состояния измерения. Это отличает тип 3 от типа 2, в котором хранятся дополнительные строки для отслеживания каждого изменения.
Этот тип отслеживания может использоваться для одного или двух столбцов в таблице измерения. Обычно он не используется для нескольких элементов в одной и той же таблице. Часто он используется в сочетании с элементами типа 1 или типа 2.
Медленно изменяющееся измерение типа 6
Медленно изменяющееся измерение типа 6 объединяет медленно изменяющиеся измерения типов 1, 2 и 3. При изменении элемента типа 2 создается новая строка с соответствующими датами начала (StartDate) и окончания (EndDate). В медленно изменяющемся измерении типа 6 также хранятся текущие значения во всех версиях сущности, поэтому вы можете легко определить текущее и историческое значение.
В примере с регионом продаж вы разделяете столбец Region на CurrentRegion
и HistoricalRegion
. Столбец CurrentRegion
всегда содержит последнее значение, а столбец HistoricalRegion
содержит регион, который был актуален в период с StartDate
до EndDate
. Поэтому в столбце CurrentRegion
для одного и того же продавца каждая запись всегда будет содержать последний указанный регион. А столбец HistoricalRegion
работает точно так же, как поле региона в примере медленно изменяющегося измерения типа 2.