zoukankan      html  css  js  c++  java
  • 数据处理_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分区会有补充贴

  • 相关阅读:
    动态创建多个pictureBox控件并响应不同的事件
    浅谈程序效率问题
    winform 下实现消息传递机制
    兼容IE的最小最大高度CSS写法
    推荐14款web开源测试工具
    winform程序窗体相关设置
    Mysql配置及错误集合
    深入理解栈
    广而博,深而远
    POJ3009
  • 原文地址:https://www.cnblogs.com/whoyoung/p/14438787.html
Copyright © 2011-2022 走看看