在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进行了转换。