美文网首页Sqoop学习
Sqoop增量导入与数据去重

Sqoop增量导入与数据去重

作者: gregocean | 来源:发表于2019-03-03 23:40 被阅读0次

    sqoop是可以配置job自动运行的,能自动记录上次同步的时间,不过如果任务失败就不方便重跑了(这方面经验不足)。

    目前的做法是手动去配置一个固定的同步周期和--last-modify值,这样一来就可能有数据重复的问题(比如数据漂移、或者任务失败重跑需要一个保险的覆盖范围)。

    解决思路大致是在同步时先允许数据重复,之后再跑一个去重sql,比如:
    sqoop增量导入问题
    不过这样做太不优雅,因为这样操作会多出一张没有实际意义的增量表。

    这里增量导入的做法差不多,只是增量到同一张表里,注意需要添加--hive-database以及--hive-table选项让新数据能自动load到hive表里,标准解释如下:
    Difference between --append and --incremental append in sqoop
    之后使用窗口函数sql去重处理

    INSERT OVERWRITE TABLE db_name.tb_name
    select
    tmp.id,
    tmp.modify_time
    from
    (
    select t.*,
    row_number() over(partition by t.id order by t.modify_time desc) as rn
     from
    (select
    id,modify_time from db_name.tb_name
    ) t
    ) tmp where tmp.rn=1;
    

    当然这样要求原表有主键以及准确非空的修改时间,如果没有还是用真正的流式数据同步来做吧(maxwell解析binlog->kafka->flume->hive)

    Done.

    附一个比较全的教程Sqoop Incremental Import | MySQL to Hive

    相关文章

      网友评论

        本文标题:Sqoop增量导入与数据去重

        本文链接:https://www.haomeiwen.com/subject/blyvuqtx.html