hive 分割槽表、桶表和外部表
1:分割槽表
圖:建立分割槽表
圖:匯入資料
圖:在HDFS的顯示資訊
分割槽欄位就是一個資料夾的標識
圖:在多列上建立分割槽
圖:匯入資料
圖:在多列上建立分割槽後在HDFS上形成的結構資訊
把表中的大多數字段建立為分割槽欄位,可行嗎?分割槽不是越多越好,分割槽越多的話,載入資料的話必須注意分割槽,那麼檔案會被控制的非常小,Map的任務數量增多,
計算不一定會快。Hive限定了分割槽的數量。選用一些查詢比較頻繁的欄位來建立分割槽,時間欄位等。
查詢比較頻繁,並且不會有很多列舉值的欄位,適合作為分割槽欄位。分割槽欄位就是虛擬列(virtual column)。
圖:查詢結果,其中分割槽欄位顯示了出來,但是在資料檔案中是不存在的,那麼我們稱它們為虛擬列。
不合理的地方,比如我們對一個網站的銷售日誌進行分析,我們根據ip地址的地區進行分割槽,那麼有些地區如京廣滬地區的ip會比較多,
造成資料分佈的不平衡,有些檔案中的資料多,有些檔案中的資料少。
2:桶表
對立面的記錄做一個hash計算,經過hash運算後, 然後對hash進行取模計算,比如mod 10,那麼取模計算後,劃分的每份的資料量是差不多的,
模的資料為桶,模10的話,那麼就有10個桶,那麼各個map進行計算的時間差不多,缺點:用業務欄位來查詢的話,沒有什麼效果。
進行表連線的時候查詢資料方便;進行抽樣查詢時比較方便,按照桶表進行抽比較符合要求。
圖:建立桶表,並載入資料
圖:分完桶後是三個檔案
3:外部表
外部表不對應HDFS的資料夾,但是在資料庫中能夠找到它。把資料表刪了不會影響資料。
外部表和分割槽表用的比較多,使用者在上傳資料時早已根據某些欄位對資料進行了劃分。
圖:建立外部表並查詢