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