数据处理_HIVE增量ETL的一种方式

适用场景:

贴源层主表历史数据过大,ETL不涉及历史数据对比或聚合

处理流程:

1.确定一个业务主键字段或物理主键字段

2.确定一个可以判断增量数据范围的字段,这取决于具体的业务场景,一般选用记录的创建时间或最后修改时间

3.确定一个分区字段,要求一段增量数据尽可能落在较少的分区,这里选用创建时间或最后修改时间的年月值

4.根据增量字段过滤主表,创建增量临时表

5.使用增量临时表完成要做ETL过程,得到一个增量结果表

6.获取增量结果表的分区字段Distinct值,存入一张表,下面把这些值简称为pt值,即partition值

7.将全量结果表(全量初始化过的)根据pt值过滤分区,再与增量结果表用业务主键full join,使用增量NVL字段优先取增量结果表上的,数据重新覆盖正式结果表分区。

8.代码案例后面会补充

 

不足点:不适用于源表经常修改历史数据的情况下,因为pt会跨越多个分区。如果同一记录修改不会反复多次修改,用最后修改时间可以优化这个问题

 

关于如何使用pt值过滤全量结果表:

pt值肯定要存入表

1.通过shell调用sql查询pt值,并解析返回内容,预处理好,然后作为执行参数传入到要执行的sql

2.或者使用where 分区字段 IN (子查询pt值),未验证,过滤性能可能有问题。

 

PS:贴源层一般会做ISU分区,增量表生成可以直接用I、S分区的,ISU分区会有补充贴

posted @ 2021-02-23 23:02  WhoYoung  阅读(949)  评论(0编辑  收藏  举报