sqoop 從oracle導資料到hive中,date型資料時分秒截斷問題

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   java   os   檔案   ar   

oracle資料庫中Date類型倒入到hive中出現時分秒截斷問題解決方案

1.問題描述:

    用sqoop將oracle資料表倒入到hive中,oracle中Date型資料會出現時分秒截斷問題,只保留了‘yyyy-MM-dd‘,而不是’yyyy-MM-dd HH24:mi:ss‘格式的,後面的‘HH24:mi:ss’被自動截斷了,在對時間要求到秒級的分析處理中這種截斷會產生問題。

2.解決方案:

    在用sqoop倒入資料表是,添加--map-column-hive 和--map-column-java參數,來改變資料表列的預設映射類型(預設情況下sqoop倒入hive中Date類型會被映射成String),將Date列映射成Timestamp類型,在我的問題中我是通過sqoop建立job,進行資料表按時間增量倒入的,PASSTIME列的資料類型是Date,指令碼如下:

sqoop job --create jobimport2hiveofv_vehicleinfo -- import --hive-import --map-column-java PASSTIME=java.sql.Timestamp --map-column-hive PASSTIME=TIMESTAMP --incremental append --connect jdbc:oracle:thin:@118.228.196.29:1521/pmptgdbanalyze --username SAN --password PASS --verbose -m 1 --bindir /opt/sqoop-1.4.4/lib --table V_VEHICLEINFO --check-column PASSTIME --last-value ‘2014-04-20 12:00:00‘

注意:

1)紅色字型標註的兩個參數用來改變列的映射類型,藍色字型標註的是資料類型,java.sql.Timestamp要帶包名寫全,否則可能會出錯。

2)--map-column-java和--map-column-hive連個參數都要顯示給出,如果只給出--map-column-hive那麼只會改變hive中表列的資料類型,而codegen產生的Tablename.java源檔案中還會是java.sql.Date類型,這樣在轉換成hive表中的TIMESTAMP類型時,就會出錯導致hive中的PASSTIME欄位全部為null。原因可能是由於Date類型預設格式‘yyyy-M-dd‘,而轉化到hive Timestamp類型時,嚴格要求按照’yyyy-mm-dd hh:mm:ss[.f...]‘格式轉換,參見hive官網timestamp格式說明。

 

3.參考說明:

sqoop user guide: http://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html#_selecting_the_data_to_import 查看map-column-hive和map-column-java參數說明

hive languageManual: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-timestamp 查看hive支援的時間類型說明

hive日期函數
http://athenaxu.blog.163.com/blog/static/2057220392014025332775/
hive資料類型轉換
http://www.iteblog.com/archives/892

hive開啟行轉列功能:
> set hive.cli.print.header=true; // 列印列名
> set hive.cli.print.row.to.vertical=true; // 開啟行轉列功能, 前提必須開啟列印列名功能
> set hive.cli.print.row.to.vertical.num=1; // 設定每行顯示的列數
> select * from example_table where pt=‘2012-03-31‘ limit 2;

hive查看資料表結構、列類型

> desc TableName;

sqoop 從oracle導資料到hive中,date型資料時分秒截斷問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.