資料倉儲 拉鍊表 增量表抽取的實現

2021-10-05 09:30:50 字數 1927 閱讀 9571

業務部門提了使用者分層的需求,其中有一點,業務放需要我們數倉提供歷史資料,並且業務庫里的部分表還沒有資料更新時間字段。所以本篇文章主要解決兩個問題

1:問題一 怎麼再hive裡實現拉鍊表

2:問題二 怎麼再沒有資料更新時間欄位的情況下獲取增量資料(個人認為這個方式也是一種通用的方式)

1:是什麼?  拉鍊表是一張記錄事務歷史變化的表,記錄乙個事務從開始到當前發生的所有變化。

2:場景:我們需要獲取使用者的歷史資料

3: 原理:所有資料=全量資料 + 變更資料

以下是我實現拉鍊表的過程,為了實驗方便使用with as語句模擬了資料

-- 1:生成實驗資料

with user_1 as (select -- 表1:全量資料

'zhangshan' as uid,123456 as phone, '1' as *** ,'2020-03-24' as start_time,'9999-12-30' as end_time

),user_2 as (select -- 表2:增量資料(使用者的性別出現了便跟)

'zhangshan' as uid,123456 as phone, '0' as ***

) -- 2: 實現拉鍊

select *

from (--全量資料集: 修改歷史資料的截至時間

select a.uid,a.phone,a.***,a.start_time,current_date() as end_time

from user_1 a

left join user_2 b on a.uid=b.uid

) cunion all -- all_data=全量資料集+增量資料集

select --增量資料集:給最新資料集加上start_time,end_time

d.*,current_date() as start_time,'9999-12-30' as end_time from user_2 d

表1:全量資料

表2:增量資料

1:如何獲取增量資料?

1.1:思路一:根據時間子段,增量同步-(我們很多表是沒有資料跟新時間欄位的)

1.2:思路二:監控日誌??(難度會比較大,需要入侵資料庫日誌,開發的工作量也會大)

1.3:思路三:獲取每天獲得乙份切偏資料,然後用兩天的切片資料去對比,就能找出最新的變更。

1.3.1:對比方式1: except方式:但是需要hive2.3.0才支援,我們環境的hive是1.1.0

1.3.2:對比方式2: concat+md5

with user_1 as (select -- 2020-04-23的切片資料

'zhangshan' as uid,123456 as phone, '1' as ***

),user_2 as (select -- 2020-04-22的切片資料

'zhangshan' as uid,123456 as phone, '0' as ***

) -- 對邊兩天的切片資料,找出資料的變化點

select a.uid,a.all_filed,b.all_filed

from(--

select

uid,concat(uid,phone,***) --拼接需要對比的字段

as all_filed,

md5(concat(uid,phone,***)) as f1

from user_1

)aleft join (

select uid,concat(uid,phone,***) as all_filed,md5(concat(uid,phone,***)) as f1 from user_2

)b on a.uid=b.uid

where a.f1<>b.f1

hive 資料倉儲之拉鍊表

先去看這篇文章 首先,下面的user表沒有用到。而且貌似也沒有用,文章中為什麼要user表我也搞不懂。明明user的拉鍊表可以就包含了user全量表的資料了。由於hdfs和hive的底層因素,不支援修改操作。所以修改資料只能先把資料查詢出來,修改完後再覆蓋原本的資料。我對上述insert sql的理...

資料倉儲 緩慢漸變維 拉鍊表

緩慢漸變維 維度會隨著時間發生緩慢的變化。處理方式 全量快照 拉鍊表全量快照很簡單,今天我們來看看拉鍊表。拉鍊表是處理緩慢漸變維的一種方式,它區別於正常的表而言,會多兩個字段,start date和end date,代表這條資料的起始時間和結束時間。如 james同學哪天想不開了,他從男的變成了女的...

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

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