將Oracle中的數據導入到hive中,發現時間格式出錯,丟失小時:分鐘:秒

今天由於項目需求,需要將Oracle中的某表數據使用sqoop導入到hive中,但是在導入過程中出現了一些小問題,原先時間數據爲 年-月-日   時:分:秒,結果導入後別的數據沒有問題,但是時間數據只有 年-月-日。這裏講如何解決這個問題。

首先先看看我導入的表結構:

第一次導入的語句:

sqoop import  --connect jdbc:oracle:thin:@192.168.100.17:1521:drcom --username drcom --password drcom --driver oracle.jdbc.driver.OracleDriver --query 'SELECT * FROM v_mid_users_online WHERE $CONDITIONS' --target-dir /user/drcom/v_mid_users_online --hive-import --fields-terminated-by '\t' --lines-terminated-by '\n' --null-string '\\N' --null-non-string '\\N' --m 1 --hive-drop-import-delims --hive-table bj_drcom.v_mid_users_online --hive-overwrite;

這裏使用此指令導入數據:

導入成功後,我們在hue中看導入後的表結構。

可以看到這個時間格式數據值截取到日。一開始我也懷疑是不是hive展現出來有問題,hive中其實存着完整的數據,然後我看了看hive這個表有沒有具體的時間。

可以看到hive中也是沒有後面我們想要的 時:分:秒,這裏我們就需要在sqoop導入的語句中修改一下指令。

發現hive導入就出了問題,我查詢了以後知道我們應該在sqoop語句中加入:

--map-column-java LOGINTIME=java.sql.Timestamp --map-column-hive LOGINTIME=TIMESTAMP

這裏也拓展一下,如果有兩個時間參數,eg:還有一個LOGOUTTIME參數,則書寫格式如下:

--map-column-java LOGINTIME=java.sql.Timestamp,LOGOUTTIME=java.sql.Timestamp --map-column-hive LOGINTIME=TIMESTAMP,LOGOUTTIME=TIMESTAMP
修改後sqoop語句如下:

sqoop import --map-column-java LOGINTIME=java.sql.Timestamp --map-column-hive LOGINTIME=TIMESTAMP --connect jdbc:oracle:thin:@192.168.100.17:1521:drcom --username drcom --password drcom --driver oracle.jdbc.driver.OracleDriver --query 'SELECT * FROM v_mid_users_online WHERE $CONDITIONS' --target-dir /user/drcom/v_mid_users_online --hive-import --fields-terminated-by '\t' --lines-terminated-by '\n' --null-string '\\N' --null-non-string '\\N' --m 1 --hive-drop-import-delims --hive-table bj_drcom.v_mid_users_online --hive-overwrite;

然後執行後可以在hue中看到具體時間已經可以看到了:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章