更新時間:2023年04月26日16時43分 來源:傳智教育 瀏覽次數:
Hive的分區可以將整體數據劃分成多個分區,從而優化查詢,但是并非所有的數據都可以被合理分區,會出現每個分區數據大小不一致的問題,有的分區數據量很大,有的分區數據量卻很小,這就是常說的數據傾斜。為了解決分區可能帶來的數據傾斜問題,Hive提供了分桶技術,Hive中的分桶是指定分桶表的某一列,讓該列數據按照哈希取模的方式隨機、均勻地分發到各個桶文件中。本節詳細講解創建分桶表的相關操作。
由于分桶表是基于內/外部表創建,所以分桶表的創建方式和創建數據表的方式類似。接下來,在虛擬機Node_03中使用Hive客戶端工具Beeline,遠程連接虛擬機Node_02的HiveServer2服務操作Hive,在數據庫hive_database中創建分桶表clustered_table,具體命令如下。
CREATE TABLE IF NOT EXISTS hive_database.clustered_table( id STRING, name STRING, gender STRING, age INT, dept STRING ) CLUSTERED BY (dept) SORTED BY (age DESC) INTO 3 BUCKETS ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY'\n' STORED AS textfile TBLPROPERTIES("comment"="This is a clustered table");
上述命令中,指定分桶表clustered_table按照列dept進行分桶,每個桶中的數據按照列age進行降序(DESC)排序,指定桶的個數為3。
注意:
(1)分桶個數是指在HDFS中分桶表的存儲目錄下會生成相應分桶個數的小文件。
(2)分桶表只能根據一列進行分桶。
(3)分桶表可以與分區表同時使用,分區表的每個分區下都會有指定分桶個數的桶。
(4)分桶表中指定分桶的列可以與排序的列不相同。