Fork me on GitHub

sqoop之旅4-增量导入

1、核心参数

–check-column:用来指定一些列,这些列在导入时候检查是否被作为增量数据;

**注意:**被检查的列的类型不能是任意字符类型,例如Char,VARCHAR…(即字符类型不能作为增量标识字段)

–incremental:用来指定增量导入的模式Mode,分为两种:append和lastmodified

**–last-value:**指定上一次导入中检查列指定字段最大值,一般是用时间

2、增量模式(Model)

  • append:在导入的新数据ID值是连续时采用,对数据进行附加;如果不加lastvalue,则原表中的所有数据都会进行增量导入,导致数据的冗余。

  • **lastmodified:**在源表中有数据更新的时候使 用,检查列就必须是一个时间戳或日期类型的字段,更新完之后,last-value会被设置为执行增量导入时的当前系统时间


3、demo

1
2
3
4
5
6
7
8
9
10
sqoop import \
--connect jdbc:mysql://centos:3306/sqooptest \
--table bigdata \
--username root \
--password 123456 \
--check-column last_mod_ts \
--incremental lastmodified
--last-value "2019-11-19 16:39:43" # 必须是时间戳或者日期时间类型
--merge-key class_id
-m 1

4、append和lastmodified

append模式

1
2
3
4
5
6
7
8
9
10
sqoop import \
--connect jdbc:mysql://centos:3306/sqooptest \
--table bigdata \
--username root \
--password 123456 \
--table bigdata \
--check-column class_id \
--incremental append \
--last-value 7 # 对于check-column来说最大值是7
-m 1

如果不加last-value,导入的是会把原表中的整个数据进行导入,出现数据的重复,造成数据的冗余

采用增量导入,必须使用三个参数

  • check-column
  • incremental
  • last-value

lastmodified模式

  1. 当导入的目录存在时,需要使用—merge-key或者—append参数

    1. 需要保留历史变更信息,使用append追加
    2. 不需要保留重复信息,使用merge—key进行合并
  2. 导入的是>= last-value的值

1
2
3
4
5
6
7
8
9
10
11
sqoop import \
--connect jdbc:mysql://centos:3306/sqooptest \
--table bigdata \
--username root \
--password 123456 \
--table bigdata \
--check-column last_mod_ts \
--incremental lastmodified \
--last-value "2019-11-19 16:39:43" \ # 指定时间戳
-merge-key class_id \ # 合并的字段
-m 1

本文标题:sqoop之旅4-增量导入

发布时间:2019年11月19日 - 17:11

原始链接:http://www.renpeter.cn/2019/11/19/sqoop%E4%B9%8B%E6%97%854-%E5%A2%9E%E9%87%8F%E5%AF%BC%E5%85%A5.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Coffee or Tea