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这一天的数据
.