使用sqoop抽取数据时报错:Caused by: java.sql.SQLException: Zero date value prohibited 解决

问题描述

jdbc报错:Caused by: java.sql.SQLException: Zero date value prohibited
Caused by: com.mysql.cj.exceptions.DataReadException: Zero date value prohibited

使用sqoop将mysql数据抽取至hive时,或在其他场景使用jdbc场景中,由于数据库中有非法零值date而导致报错,零值date比如:0000-00-00 00:00:00
在这里插入图片描述
其实错误发生在sqoop使用JDBC连接mysql读数据的时候,在一行一行读取时,会自动判断是否可写入,如果有非法值就会报错


解决方案:

在JDBC配置中添加zeroDateTimeBehavior 属性,当遇到datetime值完全由0组成时,最终的有效值可以设置为,异常(exception),一个近似值(round),或将这个值转换为null(convertToNull)。

jdbc:mysql://{host}:{port}/{databasse}?zeroDateTimeBehavior=convertToNull

完整的sqoop语句如下:

sqoop import --connect 'jdbc:mysql://{host}:{port}/{databasse}?zeroDateTimeBehavior=convertToNull' \
--username '用户名' \
--password '密码' \
--driver com.mysql.cj.jdbc.Driver \
--query 'sql语句'  \
--hcatalog-database hive库名  \
--hcatalog-table hive表名 \

zeroDateTimeBehavior有三个参数:exception、 convertToNull、 round
1.exception:默认设置为exception,在遇到零值日期会抛出一个SQLException异常,其SQLSate码为S1009;
2. convertToNull :数据库会返回 null来代替 0000-00-00 这样的无效日期;
3. round:数据库 会将日期转换为0001-01-01 返回;

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值