适用场景:
贴源层主表历史数据过大,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分区会有补充贴