在使用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類型),就沒有問題了。