datax同步mysql数据到hive时,时间类型字段少8小时问题

现象

在使用datax同步mysql数据到hive的时候,发现有些时间字段同步之后时间少了8小时。

下面分析一下具体情况。

背景知识

首先,明确一下hive支持的时间类型和datax支持的时间类型有哪些。

先看一下datax支持的数据类型:

datax同步mysql数据到hive时,时间类型字段少8小时问题_第1张图片

这是datax GitHub上的文档,可以看到datax支持的时间类型只有date和timestamp。

接下来看一下hive3.x支持的数据类型:

 datax同步mysql数据到hive时,时间类型字段少8小时问题_第2张图片

可以看到,hive也支持date和timestamp两种时间类型。

但是datax和hive都不支持datetime类型,而我们的mysql中很多时间字段存储的都是datetime类型的,我这里也是在这个类型上出现的问题。

具体情况 

mysql中有一个字段(假设为createtime),其类型为datetime。由于datax和hive都不支持datetime类型,但支持string、date和timestamp。一开始没有多想,就在datax中用string类型写出,hive中用timestamp接收。结果就出现同步到hive后对应的时间少了8小时。

这个问题是datax进行时间类型字段的类型转换时产生的,具体可以看一下datax源码。

解决办法

后来将datax中的写出类型由string类型改为timestamp类型后(mysql为datetime类型、datax为timestamp类型、hive为timestamp类型),就没有问题了。

 

你可能感兴趣的:(ETL,hive)