Hive分区、分桶表

文章详细解释了Hive中的分区和分桶概念。分区通过日期等列将数据划分为不同的区域,提高查询效率,避免全表扫描。分桶是对数据进行更细粒度的划分,基于列的hash值进行,有助于Join操作和数据抽样。分桶在HDFS上不直接显示,但在查询中可见。文章强调了分桶在处理大数据时,如Join优化和样本抽取方面的优势。
摘要由CSDN通过智能技术生成

Hive 分区和分桶的原理:
1、分区:分区是指按照数据表的某列或某些列分为多个区,区从形式上可以理解为文件夹,比如我们要收集某个大型网站的日志数据,一个网站每天的日志数据存在同一张表上,由于每天会生成大量的日志,导致数据表的内容巨大,在查询时进行全表扫描耗费的资源非常多。那其实这个情况下,我们可以按照日期对数据表进行分区,不同日期的数据存放在不同的分区,在查询时只要指定分区字段的值就可以直接从该分区查找,避免全表扫描,可以提高查询效率。

注意:分区只是添加了一个伪列,这个伪劣使我们人为规定的,只在查询的时候显示,实际在表中并不存在这个列。

分区的目的就是提高查询效率,查询分区数据的方式就是指定分区名,指定分区名之后就不再全表扫描,直接从指定分区中查询,从hdfs的角度看就是从相应的文件系统中去查找特定的数据
hive分区表建立方式:
create table test1 (
id int comment ‘工号’,
name string comment ‘名字’
)
comment ‘工号表’
partitioned by (ddate string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’ ;

2、分桶:分桶是相对分区进行更细粒度的划分。分桶将整个数据内容按照某列属性值的hash值进行区分,如要按照name属性分为3个桶,就是对name属性值的hash值对3取摸,按照取模结果对数据分桶。如取模结果为0的数据记录存放到一个文件,取模为1的数据存放到一个文件,取模为2的数据存放到一个文件。

注意:分桶的列是表中已存在的列,而不是伪列。分桶的信息在hdfs上看不到相关的文件,但是可以查询到分桶中的数据,说明确实分桶了。

hive分桶表的建立方式:
create table test1 (
id int comment ‘工号’,
name string comment ‘名字’
)
comment ‘工号表测试分桶’
clustered by(id) into 4 buckets
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’ ;

3、分区和分桶的区别:
(1)分区是指定伪列进行分区,分桶是表格中真实存在的列。
(2)分区信息在hdfs上显示的是分区文件夹,而分桶在hdfs上看不到,但是查询分桶数据们可以查询到。
(3)分桶是数据的更精细的划分。

4、分桶的使用场景:
(1)当使用分区进行数据划分的时候,出现有些分区数据过多,而有些分区数据过少的时候,这时候可以采用分桶,对数据进行划分。
(2)提升Join查询的效率,若两个表都在连接的字段上进行了分桶,那么在join的时候可以使用 Map 端连接 (Map-side join)高效的实现。比如Join 操作。对于Join 操作两个表有一个相同的列,如果对这两个表都进行了分桶操作。那么将保存相同列值的桶进行Join 操作就可以,可以大大减少Join 数据量。
(3)方便抽样:使取样(sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。

Hive中的分区分桶是用来提高查询性能和管理数据的两种技术。 分区是将数据按照某个列的值进行分区存储的。通过将数据分散存储在不同的分区中,可以减少查询时需要扫描的数据量,提高查询效率。创建分区的语法是使用ALTER TABLE语句,并指定分区的列和值。删除分区可以使用ALTER TABLE语句的DROP PARTITION子句。可以使用DESC FORMATTED命令查看分区的结构,使用SELECT语句查询分区的数据。\[1\] 分桶是将数据按照哈希函数的结果进行分桶存储的分桶可以提高数据的读取和查询效率,特别是在进行连接操作时。创建分桶的语法是使用CLUSTERED BY子句指定分桶的列,并使用INTO子句指定分桶的数量。可以使用INSERT INTO TABLE语句将数据导入分桶。\[2\] 在Hive 0.x和1.x版本中,需要设置hive.enforce.bucketing=true来强制分桶,以便程序可以根据结构自动选择正确数量的Reducer和cluster by column来进行分桶。可以使用CTAS语句将数据从一个复制到分桶中。\[3\] 总结起来,分区分桶都是用来提高查询性能和管理数据的技术,分区是按照某个列的值进行分区存储,而分桶是按照哈希函数的结果进行分桶存储。 #### 引用[.reference_title] - *1* *2* [大数据—Hive(七)_ 分区分桶](https://blog.csdn.net/m0_52968216/article/details/128667517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Hive分区分桶](https://blog.csdn.net/mxk4869/article/details/125635202)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值