表結構設計之拉鍊表

2021-06-12 14:39:48 字數 1868 閱讀 6470

一、概念

拉鍊表是針對資料倉儲設計中表儲存資料的方式而定義的,顧名思義,所謂拉鍊,就是記錄歷史。記錄乙個事物從開始,一直到當前狀態的所有變化的資訊。

在歷史表中對客戶的一生的記錄可能就這樣幾條記錄,避免了按每一天記錄客戶狀態造成的海量儲存的問題:

(name)人名  (start-date)開始日期  (end-dt)結束日期  (stat)狀態

client            19000101                  19070901             h在家

client            19070901                  19130901             a小學

client            19130901                  19160901             b初中

client            19160901                  19190901             c高中

client            19190901                  19230901             d大學

client            19230901                  19601231             e公司

client            19601231                  29991231             h退休在家

上面的每一條記錄都是不算末尾的,比如到19070901,client已經在a,而不是h了。所以除最後一條記錄因為狀態到目前都未改變的,其餘的記錄實際上在end-dt那天,都不在是該條記錄end-dt那天的狀態。這種現象可以理解為算頭不算尾。

二、演算法

1、採集當日全量資料到nd(newday)表;

2、可從歷史表中取出昨日全量資料儲存到od(oldday)表;

3、(nd-od)就是當日新增和變化的資料,也就是當天的增量,用w_i表示;

4、(od-nd)為狀態到此結束需要封鏈的資料,用w_u表示;

5、將w_i表的內容全部插入到歷史表中,這些是新增記錄,start_date為當天,而end_date為max值;

6、對歷史表進行w_u部份的更新操作,start_date保持不變,而end_date改為當天,也就是關鏈操作;

拉鍊表 實際上是乙個資料的有效 更新處理方法。 在定義了對於該方法支援的幾個欄位後可以對資料進行處理。

講解乙個加了幾個欄位的的一種處理方法

模擬場景

1、定義兩個臨時表,

乙個為當日全量資料,另乙個為需要新增或更新的資料;

create table a_day_full;

create table b;

2、獲取當日全量資料

insert into   a   select (a,b,c,cur_date, max_date) from source_table

3、抽取新增或有變化的資料,從a臨時表到b臨時表;

insert into   b 

select fieldname  from  a 

where   not in (select fieldname  from a_his where end_date='max_date'); 

4、更新歷史表的失效記錄的end_date為max值

update a1  from a_his  a1,  b  a2 

set end_date='current_date' 

where a1.xx=a2.xx  and a1.end_date='max_date';

5、將新增或者有變化的資料插入目標表*/

insert into a_his select * from b;

結構設計 資料表設計 常用表結構設計

為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。位址一般包括 省 市 縣 區 詳細位址 我們當然可以儲存乙個字段 使用分隔符 json 等儲存 介紹字段介紹 字段介紹 idbigint id parentid parentidlist chi...

Hbase表結構設計

一 主體思路 先確定查詢場景,再確定表結構。二 主鍵設計 主鍵設計需要考慮兩個問題 1.選擇哪些作為主鍵?2.當主鍵大於1個時,如何排列。2.1 邏輯上用於表示行的唯一性的列必須作為主鍵 2.2 單個查詢場景中一定出現的列可以考慮加入主鍵列,用於優化查詢效能 2.3 在多個查詢場景都出現的主鍵列要排...

HBase表結構設計

列簇設計 版本設計 資料壓縮 rowkey設計原則 在hbase有很多張表,這些表需要按照業務劃分開,為方便管理這些表,不同業務就有不同的命名空間,類似hive中的資料庫,不同的資料庫用來儲存不同型別的表。注 建立命名空間 create namespace momo chat 檢視命名空間列表 li...