Sqoop 增量导入的几种方式
Sqoop 提供了可被用于检索新的行级数据的增量导入模式
在实际工作当中,数据的导入,很多时候都是只需要导入增量数据即可,并不需要将表中的数据每次都全部导入到hive或者hdfs当中去,这样会造成数据重复的问题。因此一般都是选用一些字段进行增量的导入, sqoop支持增量的导入数据。
涉及参数
–incremental (mode)
append:追加,比如对大于last-value指定的值之后的记录进行追加导入。lastmodified:最后的修改时间,追加last-value指定的日期之后的记录
–check-column (col)
用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系型数据库中的自增字段及时间戳类似。
注意:这些被指定的列的类型不能使任意字符类型,如char、varchar等类型都是不可以的,同时-- check-column可以去指定多个列。
–last-value (value)
指定自从上次导入后列的最大值(大于该指定的值),也可以自己设定某一值
1.追加导入
一、根据自增字段导入 (–incremental append )
(1)建表导入全量
sqoop import \
--connect jdbc:oracle:thin:@124.223.41.20:1521:ORCL \
--username DARKER \
--password orcl123456 \
--query 'select * from EMP where xh in ('1','2','3','4') and $CONDITIONS' \
--num-mappers 4 \
--target-dir /user/Darke/emp_zl \
--fields-terminated-by "\t" \
--null-string "" \
--null-non-string "" \
--hive-import \
--hive-overwrite \
--hive-table EMP_ZL \
--map-column-hive EMPNO=INT,ENAME=STRING,JOB=STRING,MGR=INT,HIREDATE=DATE,SAL=INT,COMM=INT,DEPTNO=INT,XH=INT \
--split-by XH \
(2) 增量导入HIVE
sqoop import \
--connect jdbc:oracle:thin:@124.223.41.20:1521:ORCL \
--username DARKER \
--password orcl123456 \
--query 'select * from EMP where $CONDITIONS' \
--num-mappers 4 \
--target-dir /user/hive/warehouse/emp_zl \
--fields-terminated-by "\t" \
--null-string "" \
--null-non-string "" \
--split-by XH \
--incremental append \
--check-column XH \
--last-value 4
2 、根据时间戳字段导入 (–incremental lastmodified)
(1)建表全量导入HIVE
sqoop import \
--connect jdbc:oracle:thin:@124.223.41.20:1521:ORCL \
--username DARKER \
--password orcl123456 \
--query 'select * from EMP where $CONDITIONS' \
--num-mappers 4 \
--target-dir /user/Darke/emp_zl_s \
--fields-terminated-by "\t" \
--null-string "" \
--null-non-string "" \
--hive-import \
--hive-overwrite \
--hive-table EMP_ZL_S \
--map-column-hive EMPNO=INT,ENAME=STRING,JOB=STRING,MGR=INT,HIREDATE=DATE,SAL=INT,COMM=INT,DEPTNO=INT,XH=INT,XXCZSJ_RQSJ=DATE \
--split-by XH \
(2)根据时间戳增量导入HIVE
sqoop import \
--connect jdbc:oracle:thin:@124.223.41.20:1521:ORCL \
--username DARKER \
--password orcl123456 \
--table emp\
--num-mappers 1 \
--target-dir /user/Darke/emp_zl_s \
--fields-terminated-by "\t" \
--null-string "" \
--null-non-string "" \
--check-column xxczsj_rqsj \
--incremental lastmodified \
--last-value "2022-03-14 17:44:04" \
--append
lastmodified模式去处理增量时,会将大于等于last-value值的数据当做增量插入。
2.合并导入
二、根据时间戳字段进行合并导入(–incremental lastmodified ,–merge-key)
(1) 全量导入HIVE并建表
sqoop import \
--connect jdbc:oracle:thin:@124.223.41.20:1521:ORCL \
--username DARKER \
--password orcl123456 \
--table EMP \
--num-mappers 1 \
--target-dir /user/Darke/emp_zl_NEW \
--fields-terminated-by "\t" \
--null-string "" \
--null-non-string "" \
--hive-import \
--hive-overwrite \
--hive-table EMP_ZL_new \
(2)合并导入
sqoop import \
--connect jdbc:oracle:thin:@124.223.41.20:1521:ORCL \
--username DARKER \
--password orcl123456 \
--table EMP \
--num-mappers 1 \
--fields-terminated-by "\t" \
--null-string "" \
--null-non-string "" \
--target-dir /user/Darke/emp_zl_NEW \
--check-column xxczsj_rqsj \
--incremental lastmodified \
--last-value "2022-03-15 18:42:06" \
--merge-key XH \