4.sqoop增量导入

1.增量导入hdfs

在实际工作当中,数据的导入很多时候都是全量的导入一次, 之后只需要导入增量数据即可,并不需要将表中的数据全部导入到hive或者hdfs当中去,肯定会出现重复的数据的状况,所以我们一般都是选用一些字段进行增量的导入,为了支持增量的导入,sqoop也给我们考虑到了这种情况并且支持增量的导入数据. 

  • 增量导入是仅导入新添加的表中的行的技术。

  • 它需要添加 ‘incremental’, ‘check-column’, 和 ‘last-value’选项来执行增量导入。

--incremental <mode>
--check-column <column name>
--last value <last check column value>

第一种增量导入实现

  • 基于递增列的增量数据导入(Append方式)

  • 导入emp表当中id大于2的所有数据

    • 注意:这里不能加上 --delete-target-dir 参数,添加就报错

sqoop import \
--connect jdbc:mysql://node1:3306/userdb \
--username root \
--password 123456 \
--table emp \
--incremental append \
--check-column id \
--last-value 2  \
-m 1 \
--target-dir /sqoop/increment1 

参数解释
--incremental   这里使用基于递增列的增量数据导入
--check-column  递增列字段
--last-value    指定上一次导入中检查列指定字段最大值
--target-dir    数据导入的目录

提交查看HDFS上的目录看是否有数据生成

第二种增量导入实现

  • 基于时间列的增量数据导入(LastModified方式)

    • 此方式要求原有表中有time字段,它能指定一个时间戳

      • emp表结构和数据

sqoop import \
--connect jdbc:mysql://node2:3306/userdb \
--username root \
--password 123456  \
--table emp \
--target-dir /sqoop/increment2 \
--incremental lastmodified  \
--check-column createTime  \
--last-value '2020-06-01 14:01:51'  \
--m 1

参数解释
--incremental   这里使用基于时间列的增量导入
--check-column  时间字段
--last-value    指定上一次导入中检查列指定字段最大值
--target-dir    数据导入的目录
                     如果该目录存在(可能已经有数据)
                    再使用的时候需要添加 --merge-key 或则 --append
        --merge-key 指定合并key(对于源表中有更新过的数据有合并作用)
        --append    直接追加修改的数据

 

提交查看HDFS上的目录看是否有数据生成 , 只有2020-06-01这一天的数据

.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章