1.前言
Hive的分区和分桶都是细化数据管理,加快数据查询和分析,两者有什么区别呢?下面讲解一下分区和分桶的原理。
2.分区
(1)分区原理
Hive的分区表可以有一个或多个分区键,用于确定数据的存储方式。分区(除了作为存储单元)还允许用户有效地识别满足指定条件的数据,显著加快查询分析速度。分区字段并不是数据的一部分,而是加载时虚拟的列,数据在HDFS上存储时分区就相当于文件目录。
Hive的分区使用HDFS的子目录功能实现。每一个子目录包含了分区对应的列名和每一列的值
Hive的分区方式:由于Hive实际是存储在HDFS上的抽象,Hive的一个分区名对应一个目录名,子分区名就是子目录名,并不是一个实际字段。
(2)分区建表
分区表使用partitioned by 子句指定,以指定字段列,需要指定字段类型。
--分区表建表sql USE testdb; CREATE TABLE test_partition ( field1 String Comment 'field1 comment', field2 String Comment 'field2 comment'
) Comment 'table comment' PARTITIONED BY(d String Comment 'date') STORED AS ORC; --分区表查询 SELECT * FROM testdb.test_partition WHERE d = '2022-02-01';
建表完成后查看LOCATION参数为:'
hdfs://ns/user/hive/warehouse/testdb.db/test_partition'。当存储数据时,2022-02-01日期的数存储在hdfs://ns/user/hive/warehouse/testdb.db/test_partition/d=2022-02-01目录下。
如果指定多个分区列用逗号分隔开,如:建表是PARTITIONED BY(d String Comment 'date',h String Comment 'hour'),分区字段日期常用格式:d=yyyy-MM-dd,h=HH。第二个参数会作为子目录存储在HDFS上:***/test_partition/d=2022-02-01/h=12
3.分桶
(1)分桶原理
分桶表是在表或者分区表的基础上,进一步对表进行组织,分桶表的数据可以根据表中某列的哈希函数的值依次划分为存储桶,用于分桶的字段是数据中实际的一列。其原理:根据分桶的列计算hash值,对hash值取模运算,将数据放到对应的桶里。保证了每个桶中都有数据,但每个桶中的数据条数不一定相等。
如要按照name属性分为3个桶,就是对name属性值的hash值对3取摸,按照取模结果对数据分桶。如取模结果为0的数据记录存放到一个文件,取模为1的数据存放到一个文件,取模为2的数据存放到一个文件。
(2)分桶建表
分桶表由clustered by 子句指定,指定字段为真实字段,需要指定桶的个数,桶编号从零开始。
--分桶表建表sql,创建4个桶 USE testdb; CREATE TABLE test_bucket ( field1 String Comment 'field1 comment', field2 String Comment 'field2 comment'
) COMMENT 'table comment' clustered by (field1) into 4 buckets row format delimited fields terminated by ','; --分桶表查询 SELECT * FROM testdb.test_bucket WHERE field1 = '0'
4.相同点和不同点
(1)相同点
分区和分桶表都是Hive细化数据管理,加快数据查询和分析。
(2)不同点
① 表现形式:
分区表是一个目录,分桶表是文件。
分桶随机分割数据库,分区是非随机分割数据库。因为分桶是按照列的哈希函数进行分割的,相对比较平均;而分区是按照列的值来进行分割的,容易造成数据倾斜。
② 创建语句:
分区表使用partitioned by 子句指定,以指定字段为伪列,需要指定字段类型。
分桶表由clustered by 子句指定,指定字段为真实字段,需要指定桶的个数。
③ 数量:
分区表的分区个数可以增长,分桶表一旦指定,不能再增长。
④ 作用:
分区避免全表扫描,根据分区列查询指定目录提高查询速度。
分桶保存分桶查询结果的分桶结构(数据已经按照分桶字段进行了hash散列)。
分桶表数据进行抽样和JOIN时可以提高MR程序效率。
标签:Comment,分桶,分区,指定,Hive,分区表 From: https://www.cnblogs.com/yeyuzhuanjia/p/17103585.html