更新时间: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)分桶表中指定分桶的列可以与排序的列不相同。