1. 程式人生 > >hive使用中踩的一些坑

hive使用中踩的一些坑

預設分隔符問題

問題描述:

將hive中表A的內容查詢出來存放到另外表B時,發現欄位錯位,有些欄位的內容分成了幾部分存在後面的欄位中去

原因

原因是hive預設的分隔符為“/u0001”,而表A中有一個欄位的內容中間有“/u0001”,因此導致了問題的出現

解決方法

修改了表B的預設分隔符:

CREATE TABLE b row format delimited fields terminated by '\t' as 
SELECT * FROM a limit 100;

徹底解決:
或者建表時將表儲存格式改成ORC,ORC格式不需要分隔符,徹底解決問題

CREATE
TABLE b row format delimited fields terminated by '\t' stored as orc as SELECT * FROM a limit 100;

hive中表的儲存格式

  • textfile

Hive的預設儲存格式
儲存方式:行儲存
磁碟開銷大 資料解析開銷大
壓縮的text檔案 hive無法進行合併和拆分

  • SequenceFile

二進位制檔案以key,value的形式序列化到檔案中
儲存方式:行儲存
可分割 壓縮
一般選擇block壓縮
優勢是檔案和Hadoop api中的mapfile是相互相容的

  • rcfile

儲存方式:資料按行分塊 每塊按照列儲存
壓縮快 快速列存取
讀記錄儘量涉及到的block最少
讀取需要的列只需要讀取每個row group 的頭部定義。
讀取全量資料的操作 效能可能比sequencefile沒有明顯的優勢

  • orc

儲存方式:資料按行分塊 每塊按照列儲存
壓縮快 快速列存取
效率比rcfile高,是rcfile的改良版本

  • 自定義格式

使用者可以通過實現inputformat和 outputformat來自定義輸入輸出格式