Timestamp踩坑记录

Timestamp踩坑记录

最近有个任务从hive同步数据到mysql时死活报错
Error: java.io.IOException: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '2119-01-14 16:35:16' for column 'expire_date' at row 1 at ...
我再三对比两边表结构是一样的,而且再hive中对数据加工写入都是正常的,就很奇怪为啥字段类型两边都是timestamp为啥传输到mysql时识别成了datetime。
在我抓耳挠腮一顿思索之时,旁边的大佬看了眼说,timestamp有2038问题,你查查看。

遂经过搜索发现:

默认时间戳(Timestamp)类型的取值范围为’1970-01-01 00:00:01’ UTC 至’2038-01-19 03:14:07’ UTC

如此幡然醒悟,因为时间值超过timestamp的最大值了,所以会被mysql识别为datetime,从而造成时间类型错误。但是hive的timestamp类型并没有像mysql中定义的如此规范,所以直到最后一步传输时才发现此问题。

总结

虽然hive和mysql的一些语法和类型基本是通用的,但还是会有很多小细节存在很大差异,而这些需要时间和经验的积累。

你可能感兴趣的:(踩坑记,hive,mysql,数据库)