舉例說明
一克饶、SCD問題的幾種解決方案
以下為解決緩慢變化維問題的幾種辦法:
- 保留原始值
- 改寫屬性值
- 增加維度新行
- 增加維度新列
- 添加歷史表
1.1 保留原始值
某一個屬性值絕不會變化逻炊。事實表始終按照該原始值進行分組福荸。例如:出生日期的數(shù)據(jù),始終按照用戶第一次填寫的數(shù)據(jù)為準(zhǔn)
1.2 改變屬性值
- 對其相應(yīng)需要
重寫維度行中的舊值浑娜,以當(dāng)前值替換。因此其始終反映最近的情況
就乓。 - 當(dāng)一個維度值的數(shù)據(jù)源發(fā)生變化泉懦,并且不需要在維度表中保留變化歷史時稿黍,通常用新數(shù)據(jù)來覆蓋舊數(shù)據(jù)。這樣的處理使屬性所反映的中是最新的賦值祠斧。
用戶維度表
修改前:
修改后:
- 這種方法有個前提,用戶不關(guān)心這個數(shù)據(jù)的變化
- 這樣處理拱礁,易于實現(xiàn)琢锋,但是
沒有保留歷史數(shù)據(jù),無法分析歷史變化信息
1.3 增加維度新行
???????? 數(shù)據(jù)倉庫系統(tǒng)的目標(biāo)之一是正確地表示歷史
呢灶。典型代表就是拉鏈表????????
? ? ? ? ? 保留歷史的數(shù)據(jù)吴超,并插入新的數(shù)據(jù)
。
用戶維度表
修改前:
修改后:
1.4 增加維度新列
???????? 用不同的字段來保存不同的值鸯乃,就是在表中增加一個字段鲸阻,這個字段用來保存變化后的當(dāng)前值
,而原來的值則被稱為變化前的值缨睡∧胥玻總的來說,這種方法通過添加字段來保存變化后的痕跡奖年。
用戶維度表
修改前:
修改后
1.5 使用歷史表
???????? 另外建一個表來保存歷史記錄
细诸,這種方式就是將歷史數(shù)據(jù)與當(dāng)前數(shù)據(jù)完全分開來,在維度中只保存當(dāng)前最新的數(shù)據(jù)陋守。用戶維度表
用戶維度歷史表
這種方式的優(yōu)點是可以同時分析當(dāng)前及前一次變化的屬性值震贵,缺點是只保留了最后一次變化信息。
思考
???????? 我在這里給大家提個場景題水评,比如我們在淘寶上購買一件商品猩系,從下單-支付-發(fā)貨-配送-確認收貨這個幾步流。需求:統(tǒng)計出在發(fā)送到配置過程中轉(zhuǎn)了幾次中燥?
小結(jié)
???????? ?今天給大家分享了SCD解決方案寇甸,但是其實以上的解決方案不是很好,其實數(shù)倉有一個非常好的解決緩慢變化維拉鏈表
既保留了歷史數(shù)據(jù)又不會造成數(shù)據(jù)冗余疗涉,拉鏈表我們下期講幽纷。信自己,努力和汗水總會能得到回報的博敬。我是大數(shù)據(jù)老哥友浸,我們下期見~~~
獲取Flink面試題,Spark面試題偏窝,程序員必備軟件收恢,hive面試題武学,Hadoop面試題,Docker面試題伦意,簡歷模板等資源請去GitHub自行下載 https://github.com/lhh2002/Framework-Of-BigData