漫談數據倉庫:緩慢變化維度(SCD)">漫談數據倉庫:緩慢變化維度(SCD)

分類:IT技術 時間:2017-10-04

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. 就是我們現在講的這種方式,加一個字段,就方便很多了。

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

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

歡迎關註微信公眾:


Tags: 維度 變化 緩慢 倉庫 數據 類型

文章來源:


ads
ads

相關文章
ads

相關文章

ad