解决sqoop从mysql导入到hive时区相差13小时

在CDH6.3.2上,使用sqoop从mysql导入数据到hive,发现时间字段,时间相差13个小时。刚开始有点懵,很多时区是相差8个小时。但觉得应该是同类问题。

可以在Sqoop连接的时候设置时区信息:

jdbc:mysql://$DB_CNX?serverTimezone=Asia/Shanghai

更完整参考如下

sqoop import –connect “jdbc:mysql://cdh2:3306/test_db?tinyInt1isBit=false&serverTimezone=Asia/Shanghai” –username root –password root –table t_test –hive-drop-import-delims -m 1 –hive-import –hive-table entersv.ods_t_test –hive-partition-key dt –hive-partition-value ‘2022-09-21’ –input-fields-terminated-by ‘,’ –input-lines-terminated-by ‘\n’

遇见时间类型转换问题时要小心,保守最好是string,简单的比较大小不会影响后续计算。

造成相差13个小时,在于对CST时区解析混乱造成。
JDBC 误认为会话时区在CST 美国中部时间 UTC-5,那么JDBC会把数据中的 Timestamp 转为 UTC-5,MySQL 认为会话时区在 UTC+8,将 时间又按UTC+8进行了转换。

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注