当前位置:   article > 正文

Sqoop 增量导入HIVE的几种方式_sqoop增量导入数据到hive

sqoop增量导入数据到hive

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 \

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

(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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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 \
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

(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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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 \
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

(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 \
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/176940
推荐阅读
相关标签
  

闽ICP备14008679号