1. 程式人生 > >【資料倉庫】3.緩慢變化維度(SCD)

【資料倉庫】3.緩慢變化維度(SCD)

0x00 前言

本文會分享資料倉庫中和緩慢變化維度相關的內容。在看之前建議回顧一下和維度建模相關的知識點,可參考這篇:No.12 【漫談資料倉庫】維度建模

為什麼會分享這個聽起來很奇怪的東西?因為站在的筆者的視角中,只要是做資料倉庫的小夥伴們,在工作中基本上都會接觸和維度建模相關的內容,而談到維度建模,就少不了會和維度表打交道。我們要談的就是維度表相關的知識點。

在正式開始之前,先解釋一下什麼是緩慢變化維度。筆者個人理解,緩慢變化維度其實就是指在維度表中那些會隨著時間變化的欄位,比如使用者基本資料。

:緩慢是一個相對的概念。與緩慢變化的緯度相比,資料增長快速是事實表

0x01 什麼是SCD?

SCD(Slowly Changing Dimensions),中文一般翻譯成“緩慢變化維”。

緩慢變化維的提出是因為在現實世界中,維度的屬性並不是靜態的,它會隨著時間的流失發生緩慢的變化。這種隨時間發生變化的維度我們一般稱之為緩慢變化維,並且把處理維度錶的歷史變化資訊的問題稱為處理緩慢變化維的問題,有時也簡稱為處理SCD的問題。

0x02 如何處理SCD問題

在《資料倉庫工具箱》這本書中一共列舉了5中基礎緩慢變化維型別和3種混合緩慢變化維型別。我們只分享一下熟悉的4種類型。

TYPE 0:保留原始值

此型別維度屬性值絕不會變化,因此事實始終按照該原始值分組。

比如客戶的原始信用度分值,就可以用該型別。

TYPE 1:重寫

對於型別一來說,對其相應需要重寫維度行中的舊值,以當前值替換。因此其始終反映最近的情況。

注意:這樣處理,易於實現,但是沒有保留歷史資料,無法分析歷史變化資訊。

TYPE 2:增加新行

資料倉庫系統的目標之一是正確地表示歷史。當提及緩慢變化維度屬性時,型別2就是主要應用於支援這一需求的技術。

型別二的一個典型代表其實就是拉鍊表,在此,著重強調一下拉鍊表,它的確是一種非常有效的工具。隨著使用的深入,你就越能發現它的魅力。

關於拉鍊表的詳細內容,下一篇文章會專門來講。

TYPE 3:增加新屬性

儘管型別2能夠區分歷史情況,但它無法保證能夠將新屬性值和過去的歷史事實關聯,反之亦然。

這時候就可以用到型別3。

注意:這種型別使用哪種場景呢?它比較適合需要根據先後順序來得出某種結論的場景。

舉個例子,假設我們有一個使用者表表,裡面有一個欄位是使用者暱稱。現在我們現在想知道這個使用者的上一個暱稱是多少。

這個問題有兩種方式:

  1. 我們在一張歷史狀態表中找到上一個暱稱是什麼,但是這樣會比較麻煩,可能會掃描很多的資料。

  2. 就是我們現在講的這種方式,加一個欄位,就方便很多了。

這種方式的優點是可以同時分析當前及前一次變化的屬性值,缺點是隻保留了最後一次變化資訊。

這種方案在一些場景中是可以解決很多問題的,不過我們不能無限制地新增新的欄位來記錄歷史的狀態,因此在使用這種方案的時候會有一些取捨。

轉載