Sqoop增量导入与数据去重

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1/列出mysql数据库中的所有数据库sqoop list-databases -connect jdbc:mys...
    时待吾阅读 2,844评论 1 5
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    草里有只羊阅读 18,589评论 0 85
  • [TOC] 最近在研究数据采集相关的知识,需要用到Sqoop把关系型数据库的数据导入到Hive里,这里记录下自己的...
    纳尼2号阅读 19,386评论 11 23
  • 1/列出mysql数据库中的所有数据库sqoop list-databases -connect jdbc:mys...
    时待吾阅读 1,472评论 0 0
  • 2018年的第一场雪为2019而来,这是个好兆头,来年好气象!一家人围着烤火,女儿写作业,儿子DG不分,爸爸回来,...
    cissyou阅读 512评论 3 2

友情链接更多精彩内容