sqoop增量导入数据分为两种方式:
- 基于递增列的增量数据导入(Append方式)。
- 基于时间列的数据增量导入(LastModified方式)。
一、 Append方式
# append方式
--incremental append \
# 自增id列
--check-column id \
# id大于此值
--last-value 0
由于我导的某张表没有自增id,所以我不得不采用LastModified方式
使用非自增id会报错
sqoop ERROR tool.ImportTool: Import failed: Character column (xxx) can not…
二、 LastModified方式
# 2021-10-14 00:30:00
forkDay=`date -d "+1 days" "+%Y-%m-%d 00:30:00"`
......
--incremental lastmodified \
# 确保CREATE_DATE 格式与 2021-10-14 00:30:00相同
--check-column CREATE_DATE \
--last-value "$forkDay" \
注意问题:
- check-column mysql查询不严格区分大小写,但在sqoop导入参数里严格区分大小写。本人一个shell脚本中导入两张表数据,两张表都含有字段create_date,但一个全大写,一个全小写。这样导致在分区导入数据的时候,无法创建相应文件夹。
- check-column无法使用 IFNULL(CREATE_DATE,create_date) ;nvl()这类函数
- check-column和 last-value格式要完全匹配
本人在sqoop脚本的查询sql里,将查询字段(select xxx,CREATE_DATE)变为大写后,
–check-column CREATE_DATE \
可以使用了,使一个脚本导入两张表