当前位置: 首页 > news >正文

hive中分区与分桶的区别

过去,在学习hive的过程中学习过分桶与分区。但是,却未曾将分区与分桶做详细比较。今天,回顾skew join时涉及到了分桶这一概念,一时间无法区分出分区与分桶的区别。查阅资料,特地记录下来。

一、Hive分区

1.分区一般是手动添加分区,在hdfs中不同分区的数据一般存储在不同的目录下。

2.分区的个数一般是可以增长的,用户只需要在建表时指定分区字段,然后具体的分区数则是由字段中数据的种类所决定的。

3.分区通过partition by语句实现:

CREATE TABLE my_table (col1 INT,col2 STRING
)
PARTITIONED BY (dt STRING, country STRING);

4.如果数据进行了分区,在插入数据时需要使用PARTITION指定分区,使用如下语句:

INSERT INTO my_table PARTITION (dt='2023-01-01', country='China')
VALUES (1, 'data1'), (2, 'data2');

5.一般情况下分区的字段通常仅包含如下几种字段:

  • 时间:根据时间戳或日期将数据按照不同的时间段进行分区,例如按年、月、日等。
  • 地理位置:根据地理信息将数据按照不同的地域进行分区,例如国家、城市等。
  • 类别/类型:根据某个类别或类型属性将数据进行分类并进行相应的分区。

二、Hive分桶

分桶通常也是由用户指定字段,同时用户还要指定桶个数。数据按照对指定字段进行哈希函数后的结果进行划分和存储。通过分桶,可以将数据均匀分布到不同的桶中,提高查询性能。

存储方面,分桶后的数据一般在同一个目录下。

一般使用CLUSTERED BY语句进行分桶,使用方法如下:

CREATE TABLE my_bucketed_table (col1 INT,col2 STRING
)
CLUSTERED BY (col1) INTO 4 BUCKETS
SORTED BY (col2);

使用分桶一般是为了提升查询效率,比如在进行join操作时,可能会出现数据倾斜。如果是大表join大表,就需要使用SMBjoin。可以视作是mapjoin的一种。其中最重要的就是要对表进行分桶。

在进行SMBjoin时,一般执行join操作的列也必须时bucket列。这样,大表join大表就被转化为了小表join小表或大表join小表。

三、分区与分桶的区别

两者目的不同,数据分桶的目的在于进行查询时提升查询效率,尤其是join操作时。而分区表则除了优化查询,同时将数据存储在不同文件夹下,方便数据管理。

两者实现方式不同,数据分桶仅需要指定一个字段,并仅需要指定桶个数。数据分区则可以指定多个字段,并无需指定区个数。

两者应用场景不同:分区更适合于但节点数据库的管理和查询优化,而分桶更适合于分布式系统中数据的均匀分布和查询优化。

http://www.lryc.cn/news/408768.html

相关文章:

  • Blender材质-PBR与纹理材质
  • 微软的Edge浏览器如何设置兼容模式
  • SpringBoot开启多端口探究(1)
  • 优化算法:2.粒子群算法(PSO)及Python实现
  • ThreadLocal面试三道题
  • Git操作指令(已完结)
  • 大数据采集工具——Flume简介安装配置使用教程
  • C语言 #具有展开功能的排雷游戏
  • npm publish出错,‘proxy‘ config is set properly. See: ‘npm help config‘
  • Springboot 多数据源事务
  • Python每日学习
  • 数据库 执行sql添加删除字段
  • 前端开发:HTML与CSS
  • ctfshow解题方法
  • 探索 Blockly:自定义积木实例
  • MongoDB教程(二十三):关于MongoDB自增机制
  • 展馆导览系统架构解析,从需求分析到上线运维
  • Servlet详解(超详细)
  • Meta AI引入Imagine Me功能,上传图片输入提示词即可实现个性化照片
  • 常用自启设置
  • 模块与组件、模块化与组件化的理解
  • Rust:cargo的常用命令
  • LeetCode 3106.满足距离约束且字典序最小的字符串:模拟(贪心)
  • Elasticsearch 与 MySQL 在查询和插入性能上的深度剖析
  • day4 vue2以及ElementUI
  • 把redis用在Java项目
  • GORM:优雅的Go语言ORM库
  • Golang | Leetcode Golang题解之第279题完全平方数
  • Oracle系统表空间的加解密
  • pytorch backbone