hive分区和分桶你熟悉吗?
2024/3/10 21:02:25
本文主要是介绍hive分区和分桶你熟悉吗?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
两种用于优化查询性能的数据组织策略,数仓设计的关键概念,可提升Hive在读取大量数据时的性能。
1 分区(Partitioning)
根据表的某列的值来组织数据。每个分区对应一个特定值,并映射到HDFS的不同目录。
常用于经常查询的列,如日期、区域等。这样可以在查询时仅扫描相关的分区,而不是整个数据集,从而减少查询所需要处理的数据量,提高查询效率。
物理上将数据按照指定的列(分区键)值分散存放于不同的目录中,每个分区都作为表的一个子目录。
创建分区表
CREATE TABLE orders ( order_id INT, order_date DATE, order_customer INT, order_total FLOAT ) PARTITIONED BY (country STRING);
基于country
列创建分区将使得每个国家的订单数据存储在不同的目录中。
2 分桶(Bucketing)
使用哈希函数将数据行分配到固定数量的存储桶(即文件)中。这在表内部进一步组织数据。
- 对提高具有大量重复值的列(如用户ID)上JOIN操作的效率特别有用,因为它可以更有效地处理数据倾斜
- 要求在创建表时指定分桶的列和分桶的数目
创建分桶表
CREATE TABLE user_activities ( user_id INT, activity_date DATE, page_views INT ) CLUSTERED BY (user_id) INTO 256 BUCKETS;
user_id
是用于分桶的列,数据会根据用户ID的哈希值分配到256个存储桶中。
3 对比
- 分区是基于列的值,将数据分散到不同的HDFS目录;分桶则基于哈希值,将数据均匀地分散到固定数量的文件中。
- 分区通常用于减少扫描数据的量,特别适用于有高度选择性查询的场景;而分桶有助于优化数据的读写性能,特别是JOIN操作。
- 分区可以动态添加新的分区,只需要导入具有新分区键值的数据;分桶的数量则在创建表时定义且不能更改。
使用分区时要注意避免过多分区会导致元数据膨胀,合理选择分区键,确保分布均匀;而分桶则通常针对具有高度重复值的列。两者结合使用时,可以进一步优化表的读写性能和查询效率。
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都技术专家兼架构,多家大厂后端一线研发经验,各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。
负责:
- 中央/分销预订系统性能优化
- 活动&优惠券等营销中台建设
- 交易平台及数据中台等架构和开发设计
目前主攻降低软件复杂性设计、构建高可用系统方向。
参考:
- 编程严选网
这篇关于hive分区和分桶你熟悉吗?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-23Fluss 写入数据湖实战
- 2024-12-22揭秘 Fluss:下一代流存储,带你走在实时分析的前沿(一)
- 2024-12-20DevOps与平台工程的区别和联系
- 2024-12-20从信息孤岛到数字孪生:一本面向企业的数字化转型实用指南
- 2024-12-20手把手教你轻松部署网站
- 2024-12-20服务器购买课程:新手入门全攻略
- 2024-12-20动态路由表学习:新手必读指南
- 2024-12-20服务器购买学习:新手指南与实操教程
- 2024-12-20动态路由表教程:新手入门指南
- 2024-12-20服务器购买教程:新手必读指南