hive使用中踩的一些坑
阿新 • • 發佈:2018-11-02
預設分隔符問題
問題描述:
將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來自定義輸入輸出格式