1. 程式人生 > >hive 分割槽表、桶表和外部表

hive 分割槽表、桶表和外部表

1:分割槽表

     圖:建立分割槽表


      圖:匯入資料


        圖:在HDFS的顯示資訊

分割槽欄位就是一個資料夾的標識


     圖:在多列上建立分割槽


      圖:匯入資料


                 圖:在多列上建立分割槽後在HDFS上形成的結構資訊

把表中的大多數字段建立為分割槽欄位,可行嗎?分割槽不是越多越好,分割槽越多的話,載入資料的話必須注意分割槽,那麼檔案會被控制的非常小,Map的任務數量增多,

計算不一定會快。Hive限定了分割槽的數量。選用一些查詢比較頻繁的欄位來建立分割槽,時間欄位等。

查詢比較頻繁,並且不會有很多列舉值的欄位,適合作為分割槽欄位。分割槽欄位就是虛擬列(virtual column)。


       圖:查詢結果,其中分割槽欄位顯示了出來,但是在資料檔案中是不存在的,那麼我們稱它們為虛擬列。

不合理的地方,比如我們對一個網站的銷售日誌進行分析,我們根據ip地址的地區進行分割槽,那麼有些地區如京廣滬地區的ip會比較多,

造成資料分佈的不平衡,有些檔案中的資料多,有些檔案中的資料少。

2:桶表

對立面的記錄做一個hash計算,經過hash運算後,  然後對hash進行取模計算,比如mod 10,那麼取模計算後,劃分的每份的資料量是差不多的,

模的資料為桶,模10的話,那麼就有10個桶,那麼各個map進行計算的時間差不多,缺點:用業務欄位來查詢的話,沒有什麼效果。

進行表連線的時候查詢資料方便;進行抽樣查詢時比較方便,按照桶表進行抽比較符合要求。


      圖:建立桶表,並載入資料


                                                                                     圖:分完桶後是三個檔案

3:外部表

 外部表不對應HDFS的資料夾,但是在資料庫中能夠找到它。把資料表刪了不會影響資料。

外部表和分割槽表用的比較多,使用者在上傳資料時早已根據某些欄位對資料進行了劃分。


       圖:建立外部表並查詢