记sqoop将mysql数据增量导入hdfs的致命问题

sqoop增量导入数据分为两种方式:

  1. 基于递增列的增量数据导入(Append方式)。
  2. 基于时间列的数据增量导入(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" \

注意问题:

  1. check-column mysql查询不严格区分大小写,但在sqoop导入参数里严格区分大小写。本人一个shell脚本中导入两张表数据,两张表都含有字段create_date,但一个全大写,一个全小写。这样导致在分区导入数据的时候,无法创建相应文件夹。
  2. check-column无法使用 IFNULL(CREATE_DATE,create_date) ;nvl()这类函数
  3. check-column和 last-value格式要完全匹配

本人在sqoop脚本的查询sql里,将查询字段(select xxx,CREATE_DATE)变为大写后,
–check-column CREATE_DATE \
可以使用了,使一个脚本导入两张表

Guess you like

Origin blog.csdn.net/weixin_41772761/article/details/120739107