datax同步mysql數據到hive時,時間類型字段少8小時問題

現象

在使用datax同步mysql數據到hive的時候,發現有些時間字段同步之後時間少了8小時。

下面分析一下具體情況。

背景知識

首先,明確一下hive支持的時間類型和datax支持的時間類型有哪些。

先看一下datax支持的數據類型:

這是datax GitHub上的文檔,可以看到datax支持的時間類型只有date和timestamp。

接下來看一下hive3.x支持的數據類型:

 

可以看到,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類型),就沒有問題了。