分区表和分桶表区别

本文介绍了Hive中的分区和分桶概念,分区通过目录形式优化查询速度,允许按分区条件快速定位数据;而分桶则是对特定字段进行哈希取模,实现更细粒度的数据划分,有助于数据抽样和JOIN操作的效率提升。创建分区表使用'partitioned by',创建分桶表则用'clustered by',理解并合理运用这两者能有效提高Hive查询性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分区

分区表现为HDFS上表目录的子目录,数据按照分区存储在子目录中。如果查询的 where 字句的中包含分区条件,则直接从该分区去查找,而不是扫描整个表目录,合理的分区设计可以极大提高查询速度和性能。

在hive中创建表时使用partitioned by(partition_name string)定义分区

分桶

分桶是相对分区进行更细粒度的划分。按照某字段的hash值并对分桶个数取模。
例,按照name字段分为3个桶,就是对name属性值的hash值对3取摸,按照取模结果对数据分桶。如取模结果为0的数据记录存放到一个文件,取模为1的数据存放到一个文件,取模为2的数据存放到一个文件。

在hive中创建表时使用clustered by(column_name) into N buckets定义分桶列及分桶个数N

两者区别

 分区表分桶表
字段表外字段(伪列),需要单独指定类型表内字段,做hash算法后对分桶个数取模
表现形式目录文件
数量可以不断增多一旦确定数量不变
关键字partitioned by(partition_name string)clustered by(column_name) into N buckets
粒度较粗较细,可以对表进行先分区再分桶的划分策略
效率避免全表扫描,根据分区列查询指定目录提高查询速度分桶表数据进行抽样和JOIN时可以提高MR程序效率

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值