處理資料倉儲中歷史資料的若干問題

2022-09-05 20:30:12 字數 2493 閱讀 7702

常見的

dwh的構架,簡易的來說如下圖一和圖二和圖三。一般的企業,從資料生命週期而言,只有

5-7年,特別是明細資料,資料的粒度層次越低,生命週期越短,資料的粒度越高,生命越長。對於乙個銀行的流水賬資料而言,你或許在

10年之後還想查詢一下這個記錄的明細,但是這樣的概率是非常的低的,我們的企業也不可能為了乙個在

10年之後只有萬分之一操作概率,而把這

10年的資料都保留在乙個實時查詢的資料庫中,當然我這裡說的只是當前應用的資料倉儲,交易系統那又另當別論了。

圖一沒有明確的表示出如何處理歷史資料,而只是簡單的應用構架。

圖一:圖二和圖一的區別在於2和

3的區別(僅從圖形的表示方式而言),但是這樣的意義其實是不一樣的,雖然

dwh(資料倉儲

datawarehousing

)和dwhhistory

(資料倉儲歷史庫),在資料本質上是沒有區別的,但是我們可以預見的效率是不一樣的,他們的儲存有數量級上的明顯差異

圖二:而圖三隻是將圖一和二合併,但是我們可以看到的是構架上的完整性。

圖三:在論述之前,我們先明確一下幾個重要的詞彙

1:資料粒度:資料有彙總資料,也有明細資料,每天的資料就是明細資料,而每個月,每年的資料就是彙總資料。資料的粒度是伴隨維度而存在的。維度層次越低,資料粒度越低。

2:資料的生命週期:資料是有生命的,它的使用頻率就是他的生命,當前月份的資料一般都是生命值最高的,而離現在越久的資料,使用頻率一般都是越低的。所以在規劃

dwh的構架時,我們可以按照業務上的使用價值,儲存空間的大小,以及成本幾個方面,將資料按照其粒度,可以定義成不同的生命週期。比如日,月,年這就是簡單的時間維度,而日資料的生命週期可以定義為

2年,月資料可以定義為

5年,年資料可以定義為

10年等等。如果現在是

2023年1

月1日,那麼系統就可以將

2005

年及以前的資料都彙總從月資料和年資料,然後

2023年1

月1日以前的日資料全部放入到歷史資料庫中,然後將當前資料倉儲中的相關資料刪除掉,將

2023年1

月以前的月資料全部彙總為年資料,然後載入到歷史庫中,然後刪除。年資料的處理辦法亦如此。如下圖的表示

再來談談歷史資料的會遇到的問題

歷史資料如何應用?對於歷史資料的應用有兩種辦法,第一是單獨為歷史資料倉儲建立乙個

web應用,第二是和當前庫一起使用,只是在資料來源的查詢上做出區分。比如我們可以設定乙個查詢歷史資訊的介面和乙個查詢當前應用的介面。如果歷史資料庫和當前資料庫都是同一伺服器上,則可以使用檢視的方式進行查詢。

歷史資料如何存放

歷史資料的結構是怎麼樣的?歷史資料表的結構,涉及到表名和列名,如果按照時間來區分的話,大資料量的企業,可以按照年份來儲存歷史資料,比如當前庫的表名為

t_name

,那麼歷史庫中

2000

年的資料,可以為

t_name_2000

,當然這些必須是有時間戳的,一般沒有時間戳的資料量很大的表是很少見的,如果遇到這樣的情況,可以放在同一張表中。至於列名,可以和當前庫一致,也可以和當前庫不一致,如果不一樣,一定要建立乙個相關的檢視來對映源表。

如何簡單有效的進行載入?建議採用一張日誌表。每一次對於

dwh和

dwhhistory

的資料互動,都做出詳細的表述。具體有一下幾類記錄

l載入批處理號(

batchid)l

操作時間

l源資料庫名

l目標資料庫名

l源資料表

l目標資料表

l需遷移資料的起始時間(比如需要從

2000-1-1

到2000-12-31

的資料轉移到

dwhhistory

,那麼這裡的時間就是

2000-1-1)l

需遷移資料的終止時間(同上,

2000-12-31)l

載入起始時間(從什麼時候開始執行

etl載入的)

l載入結束時間(從什麼時候完成執行

etl載入的)

l載入資料量(本次批操作,有多少資料量)

l彙總維度粒度

l操作標誌(刪除,插入還是更新)

l完成標識

l載入描述

l錯誤資訊

l資料集市中的資料如何展現?如果資料集市中既有

2年前的月資料和年資料,也有

2年內的明細日資料,這樣對於同一度量是存在不同粒度的資料,簡單的說,這是不能在同乙個

cube

中展現的,因為

cube

是自動彙總的,除非將維度按照量度變數來處理。所以最好能將明細資料展現和彙總的月度資料、年度資料展現區分開。

怎麼樣處理在資料集市中需要分析歷史明細資料的需求?對這樣的應用,我們可以將歷史資料插入到資料集市中,因為資料集市的資料是不需要逆轉的,也就是不像

dwh需要回寫到

dwhhistory

中。

資料倉儲歷史資料儲存 拉鍊表

假如我們有乙個賬號account表,我們需要在hive中儲存 資料是從線上mysql讀取binlog同步來的,是有明細變化的 account表結構 account id,username,followers count,modified at我們經常使用的儲存方式有快照表和流水表。快照表就是以時間為...

資料倉儲中資料粒度

粒度問題是設計資料倉儲的乙個最重要方面。粒度是指資料倉儲的資料單位中儲存資料的細化或綜合程度的級別。細化程度越高,粒度級就越小 相反,細化程度越低,粒度級就越大。確定粒度是資料倉儲開發者需要面對的乙個重要的設計問題。如果資料倉儲的粒度確定合理,設計和實現中的其餘方面就可以非常順暢地進行 反之,如果粒...

資料倉儲中資料粒度

粒度問題是設計資料倉儲的乙個最重要方面。粒度是指資料倉儲的資料單位中儲存資料的細化或綜合程度的級別。細化程度越高,粒度級就越小 相反,細化程度越低,粒度級就越大。確定粒度是資料倉儲開發者需要面對的乙個重要的設計問題。如果資料倉儲的粒度確定合理,設計和實現中的其餘方面就可以非常順暢地進行 反之,如果粒...