sqoop 从HDFS导出数据到MySQL8

博客围绕数仓运算结果导出到MySQL时的数据解析错误展开。分析发现Sqoop 1.4.7只支持MySQL 5.x版本,在从MySQL 8.x导出数据到HDFS正常,但导入时会串列。解决办法是在Sqoop导出语句中添加columns参数,列出表列名,最终成功导入数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

当数仓运算完成后,需要导出结果到 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 中!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值