更新時(shí)間:2023年04月26日16時(shí)43分 來源:傳智教育 瀏覽次數(shù):
Hive的分區(qū)可以將整體數(shù)據(jù)劃分成多個(gè)分區(qū),從而優(yōu)化查詢,但是并非所有的數(shù)據(jù)都可以被合理分區(qū),會(huì)出現(xiàn)每個(gè)分區(qū)數(shù)據(jù)大小不一致的問題,有的分區(qū)數(shù)據(jù)量很大,有的分區(qū)數(shù)據(jù)量卻很小,這就是常說的數(shù)據(jù)傾斜。為了解決分區(qū)可能帶來的數(shù)據(jù)傾斜問題,Hive提供了分桶技術(shù),Hive中的分桶是指定分桶表的某一列,讓該列數(shù)據(jù)按照哈希取模的方式隨機(jī)、均勻地分發(fā)到各個(gè)桶文件中。本節(jié)詳細(xì)講解創(chuàng)建分桶表的相關(guān)操作。
由于分桶表是基于內(nèi)/外部表創(chuàng)建,所以分桶表的創(chuàng)建方式和創(chuàng)建數(shù)據(jù)表的方式類似。接下來,在虛擬機(jī)Node_03中使用Hive客戶端工具Beeline,遠(yuǎn)程連接虛擬機(jī)Node_02的HiveServer2服務(wù)操作Hive,在數(shù)據(jù)庫(kù)hive_database中創(chuàng)建分桶表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進(jìn)行分桶,每個(gè)桶中的數(shù)據(jù)按照列age進(jìn)行降序(DESC)排序,指定桶的個(gè)數(shù)為3。
注意:
(1)分桶個(gè)數(shù)是指在HDFS中分桶表的存儲(chǔ)目錄下會(huì)生成相應(yīng)分桶個(gè)數(shù)的小文件。
(2)分桶表只能根據(jù)一列進(jìn)行分桶。
(3)分桶表可以與分區(qū)表同時(shí)使用,分區(qū)表的每個(gè)分區(qū)下都會(huì)有指定分桶個(gè)數(shù)的桶。
(4)分桶表中指定分桶的列可以與排序的列不相同。
北京校區(qū)