學習筆記之數據倉庫的各種表


預熱:

我們先從幾個物理概念入手理解什么是流量,存量,增量

(1)存量:系統在某一時點時的所保有的數量;

(2)流量:是指在某一段時間內流入/流出系統的數量

(3)增量:是指在某一段時間內系統中保有數量的變化

(4)增量 = 流入量--流出量

(5)本期期末存量 = 上期期末存量+本期內增量

 

全量表:每天的所有的最新狀態的數據

全量表沒有分區,表中的數據時前一天的所有數據,比如說今天是24號,那么全量表里面擁有的數據是23號的所有數據,每次往全量表里面寫數據都會覆蓋之前的數據,所以全量表不能記錄歷史的數據情況,只有截止到當前最新的、全量的數據。

(1)全量表,有無變化,都要報

(2)每次上報的數據都是所有的數據(變化的+沒有變化的)

快照表

那么要能查到歷史數據情況又該怎么辦呢?這個時候快照表就派上用途了,快照表是有時間分區的,每個分區里面的數據都是分區時間對應的前一天的所有全量數據,比如說當前數據表有3個分區,24號,25號,26號。其中,24號分區里面的數據就是從歷史到23號的所有數據,25號分區里面的數據就是從歷史到24號的所有的數據,以此類推。

但是這樣也有一個問題,就是數據量大的時候,其實每個分區都存儲了許多重復的數據,非常的浪費存儲空間。

於是乎,拉鏈表就出來了。

在介紹拉鏈表之前,我們先介紹一下增量表。

增量表:新增數據,增量數據是上次導出之后的新數據

增量表,就是記錄每天新增數據的表,比如說,從24號到25號新增了哪些數據改變了哪些數據,這些都會存儲在增量表的25號分區里面。上面說的快照表的25號分區和24號分區(都是t+1),實際時間分別對應26號和25號),它倆的數據相減就是實際時間25號到26號有變化的、增加的數據,也就相當於增量表里面25號分區的數據。

(1)記錄每次增加的量,而不是總量

(2)流量是指在一定時間內的增量

(3)流量一般設計成增量表(日報-常用、月報);

(4)流量和存量的區別:流量是增量;存量是總量;

(5)增量表,只報變化量,無變化不用報

拉鏈表

拉鏈表,它是一種維護歷史狀態,以及最新狀態數據的一種表。拉鏈表也是分區表,有些不變的數據或者是已經達到狀態終點的數據就會把它放在分區里面,分區字段一般為開始時間:start_date和結束時間:end_date。一般在該條有效的數據,它的end_date是大於等於改天的日期的。獲取某一天全量的數據,可以通過表中的start_date和end_date來做篩選,選出固定某一天的數據。例如我想截止到20190813的全量數據,其中where過濾條件就是where start_date<='20190813' and end_date>='20190813'

(1)記錄一個事物從開始,一直到當前狀態的所有變化的信息;

(2)拉鏈表每次上報的都是歷史記錄的最終狀態,是記錄在當前時刻的歷史總量;

(3)當前記錄存的是當前時間之前的所有歷史記錄的最后變化量(總量);

(4)存量是在某一時刻的總量;

(5)存量一般設計成拉鏈表(月報-常用、日報)

(6)流量和存量的區別:流量是增量;存量是總量;

(7)封鏈時間可以是2999,3000,9999等等比較大的年份;拉鏈表到期數據要報0;

(8)拉鏈表和增量表的共同點:表的結構基本一樣。

在有些情況下,為了保持歷史的一些狀態,需要用拉鏈表來做,這樣做的目的可以在保留所有狀態的情況下可以節省空間。

拉鏈表適用於以下幾種情況吧 數據量有點大,表中某些字段有變化,但是呢變化的頻率也不是很高,業務需求呢又需要統計這種變化狀態,每天全量表一份,有點不太現實,不僅浪費了存儲空間,有時可能業務統計也有點麻煩,這時,拉鏈表的作用就體現出來了,既節省空間,又滿足了需求。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM