数据仓库中如何做增量处理

  1. 为什么做增量
    数据量大,只需要增量最新被更改的数据。

  2. 如何做增量
    (1)insert into
    比如行为数据,发生一条记录就插入一条,数据不会被update。
    严格T+1,初始化时候限定created_at的时间。否则凌晨之后的数据会被重复插入。
    (2)insert overwrite
    初始化的时候不限定时间。
    增量的时候where to_date(a.updated_at) >= '%s'
    (选择updated_at 做为增量字段,接近凌晨创建的数据2016-12-20 23:59:58的更新时间是T日,此数据不会被增量进,接近严格T+1 。以updated_at做为初始化时候时间的限制字段,会将T日凌晨之后更新创建于几日前的数据剔除,此为bug。)

增量的方法步骤如下:
1)建表
use default;
create table if not exists loan_f_order_info
(
ord_no string comment "订单号",
uid string comment "用户ID",
crt_tim timestamp comment "创建时间",
upd_tim timestamp comment "更新时间"
)
COMMENT "test表";

2)初始化
insert overwrite table loan_f_order_info
select order_no as ord_no,
uid as uid,
created_at as crt_tim,
updated_at as upd_tim
from ods_loan.ods_loan_dsloan_loan_stage_order

3)增量
a)insert into table default.loan_f_order_info
select order_no as ord_no,
uid as uid,
created_at as crt_tim,
updated_at as upd_tim
from ods_loan.ods_loan_dsloan_loan_stage_order
where to_date(updated_at) >= date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),1)

b)insert overwrite table default.loan_f_order_info
select ord_no,
uid,
crt_tim,
upd_tim
from (
select *,
row_number() over(partition by uid, ord_no order by upd_tim desc) as row_num
from default.loan_f_order_info
) za
where row_num = '1'

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • PLEASE READ THE FOLLOWING APPLE DEVELOPER PROGRAM LICENSE...
    念念不忘的阅读 14,595评论 5 6
  • 终于,为期几天的阅卷工作结束了,可以说是一种煎熬啊!每天晚上睡不着,白天又坐在电脑前一坐就是八九个小时,活生生的被...
    浩_fe46阅读 3,043评论 0 0
  • 1.数据库连接与数据读取 连接数据库,创建表等: 读取zip数据 2.选择与定位 3、新增与变更 参考pandas...
    chrispher2012阅读 3,401评论 0 1
  • 举目望空孤雁单,迎风展翅向南方。 休歇枯树心安在,不畏迢迢去故乡。
    徐一村阅读 2,394评论 0 6