hive增量表和全量表 拉鍊表小結

2021-10-12 20:22:38 字數 2618 閱讀 2906

記錄每條資訊的生命週期,一旦一條資訊的生命週期結束,就重新開始一條新紀錄,並把當前日期放入生效日期。 如果當前日期至今有效,在結束日期放入乙個最大值,例如(9999-99-99)

- 優勢:訂單1經歷了四個生命週期,如果每天增量同步資料,則一年有365條資料,而拉鍊表只會產生4條資料

通常要在原表的基礎上加入start_date,end_date,並從原表匯入資料到拉鍊表

drop table if exists dwd_order_info_his;

create external table dwd_order_info_his(

`id` string comment '訂單編號',

`order_status` string comment '訂單狀態',

`start_date` string comment '有效開始日期',

`end_date` string comment '有效結束日期'

) comment '訂單拉鍊表'

臨時表和拉鍊表表結構一致,只是為了儲存中間過程。

drop table if exists dwd_order_info_his_tmp;

create external table dwd_order_info_his_tmp(

`id` string comment '訂單編號',

`order_status` string comment '訂單狀態',

`start_date` string comment '有效開始日期',

`end_date` string comment '有效結束日期'

) comment '訂單拉鍊臨時表'

插入前,拉鍊表資料

訂單新增表資料

插入資料後

訂單1和訂單2,訂單狀態都發生了改變,產生了新資料

具體sql

insert overwrite table dwd_order_info_his_tmp

select * from

(select

id, total_amount,

order_status,

user_id,

payment_way,

out_trade_no,

create_time,

operate_time,

'2019-02-14' start_date,

'9999-99-99' end_date

from dwd_order_info where dt='2019-02-14'

union all

select oh.id,

oh.total_amount,

oh.order_status,

oh.user_id,

oh.payment_way,

oh.out_trade_no,

oh.create_time,

oh.operate_time,

oh.start_date,

if(oi.id is null, oh.end_date, date_add(oi.dt,-1)) end_date

from dwd_order_info_his oh left join

(select

*from dwd_order_info

where dt='2019-02-14'

) oi

on oh.id=oi.id and oh.end_date='9999-99-99'

)his

order by his.id, start_date;

其中第一部分是吧2019-02-14所有新增和變化的資料插入臨時表,第二部分是原歷史表和新增變化表左連線,如果新增變化變存在id,則end_date置為前一天。如果沒有匹配到,代表沒有變化,end_date保持不變。同時記得條件要有end_date='9999-99-99',表示只與當前最新的訂單狀態進行匹配。

因為hive修改字段值不方便,直接全變覆蓋

insert overwrite table dwd_order_info_his 

select * from dwd_order_info_his_tmp;

拉鍊表 增量表 全量表

記錄乙個事物從開始到當前狀態的所有的變化資訊。適用於 資料量非常大的表 表中的某些欄位會被更新操作 需要檢視歷史資訊 表的資料更新變化不是很大。拉鍊表中會定義資料的st date和end date。初始表a cust id account st dt end dt a100 20170801 299...

真正秒懂增量表 全量表和拉鍊表

增量表 記錄更新週期內新增的資料,即在原表中資料的基礎上新增本週期內產生的新資料 全量表 記錄更新週期內的全量資料,無論資料是否有變化都需要記錄 拉鍊表 一種資料儲存和處理的技術方式,可以記錄資料的歷史資訊,記錄資料從開始一直到當前所有變化的資訊。增量表 以頁面訪問資料表為例,假設該錶從2020 0...

什麼是全量表,增量表,快照表,拉鍊表?

這一篇文章我們的目的是搞懂這四種表的概念,閒話不多說,直接看文字。全量表 全量表沒有分割槽,表中的資料是前一天的所有資料,比如說今天是24號,那麼全量表裡面擁有的資料是23號的所有資料,每次往全量表裡面寫資料都會覆蓋之前的資料,所以全量表不能記錄歷史的資料情況,只有截止到當前最新的 全量的資料。快照...