sqoop 从HDFS导出数据到MySQL8

南门建章
2023-12-01

问题

当数仓运算完成后,需要导出结果到 MySQL 中时,报数据解析错误;

经过一通检查发现 sqoop 语句写的并没有什么错误,分隔符也没问题,也都正常分割了,但就是往 MySQL 导入时报格式匹配错误;

分析

经查文档 Sqoop User Guide (v1.4.7) Sqoop 1.4.7 只支持 MySQL 5.x 版本,而我的是 8.x 版本,sqoop 包中的 mysql-connector-java-8.0.11.jar 驱动也是安装时单独考进去的,在从 MySQL 8.x 导出数据到 HDFS 时正常,但导入时会出现数据串列而发生格式解析错误问题;

解决

在 Sqoop 从 HDFS 导出数据到 MySQL 的语句中添加 columns 参数,将表中的列名写一遍,就不会出现串列的情况了,例如:

sqoop export \
	-Dorg.apache.sqoop.export.text.dump_data_on_error=true \
    --connect "jdbc:mysql://s3:3306/zshop_report?useUnicode=true&characterEncoding=utf-8"  \
    --username root \
    --password root \
    --table ads_activity_stats \
    --columns dt,activity_id,activity_name,start_date,order_count,order_original_amount,order_final_amount,reduce_amount,reduce_rate \
    --num-mappers 1 \
    --export-dir /warehouse/zshop/ads/ads_activity_stats \
    --input-fields-terminated-by "\t" \
    --update-mode allowinsert \
    --update-key dt,activity_id \
    --input-null-string '\\N'    \
    --input-null-non-string '\\N'

添加 columns 参数后再导入,问题消失,成功将数据导入到 MySQL 中!

 类似资料: