Hive分区和分桶的区别
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程序效率。
Hive分区和分桶的区别的更多相关文章
- hive -- 分区,分桶(创建,修改,删除)
hive -- 分区,分桶(创建,修改,删除) 分区: 静态创建分区: 1. 数据: john doe 10000.0 mary smith 8000.0 todd jones 7000.0 boss ...
- HIVE—索引、分区和分桶的区别
一.索引 简介 Hive支持索引,但是Hive的索引与关系型数据库中的索引并不相同,比如,Hive不支持主键或者外键. Hive索引可以建立在表中的某些列上,以提升一些操作的效率,例如减少MapRed ...
- Hive分区表与分桶
分区表 在Hive Select查询中.通常会扫描整个表内容,会消耗非常多时间做不是必需的工作. 分区表指的是在创建表时,指定partition的分区空间. 分区语法 create table tab ...
- Hive动态分区和分桶(八)
Hive动态分区和分桶 1.Hive动态分区 1.hive的动态分区介绍 hive的静态分区需要用户在插入数据的时候必须手动指定hive的分区字段值,但是这样的话会导致用户的操作复杂度提高,而且在 ...
- Hive为什么要分桶
对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记 ...
- hive 分区表和分桶表
1.创建分区表 hive> create table weather_list(year int,data int) partitioned by (createtime string,area ...
- Hive学习笔记——Hive中的分桶
对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记 ...
- Hive 学习之路(五)—— Hive 分区表和分桶表
一.分区表 1.1 概念 Hive中的表对应为HDFS上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大. 分区为HDFS上表目录的子目录,数据按照分区存储在子目录中.如 ...
- Hive 系列(五)—— Hive 分区表和分桶表
一.分区表 1.1 概念 Hive 中的表对应为 HDFS 上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大. 分区为 HDFS 上表目录的子目录,数据按照分区存储在子 ...
- 入门大数据---Hive分区表和分桶表
一.分区表 1.1 概念 Hive 中的表对应为 HDFS 上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大. 分区为 HDFS 上表目录的子目录,数据按照分区存储在子 ...
随机推荐
- 实现不限层级的Element的NavMenu
做管理后台开发的时候,需要用到Element的NavMenu组件,于是乎,翻开文档,大致是这样实现的. <el-menu> <el-menu-item index="1&q ...
- Deployment 和 StatefulSets 概述
这篇概述是看文章提到的一段话 xxx is not targeted to be horizontally scalable 引发的,遂整理记录在这里. 起因是有两个应用,一个是无状态的,可以 hor ...
- jmap 查看jvm内存大小并进行dump文件内存分析
本文为博主原创,未经允许不得转载: 1.jmap的使用 Jmap 可以用来查看内存信息,实例个数以及占用内存大小. jmap -histo[:live] 打印每个class的实例数目,内存占用,类全名 ...
- kafka常用操作
kafka运维常用查询操作总结以下几点: kafka生产和消费消息测试 发送:bin/kafka-console-producer.sh --broker-list 10.46.200.165:909 ...
- tomcat 一闪而过 ( 解决方案 )
配置JAVA_HOME,注意变量值是jdk的主目录,不是bin目录,并且不要加分号
- canal报错nosuchmethod ..bytebuffer
解决方法:更新jdk版本与es一致
- [转帖] Linux命令拾遗-使用blktrace分析io情况
https://www.cnblogs.com/codelogs/p/16060775.html 原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 一般来说,想检 ...
- [转帖]Kibana查询语言(KQL)
时间 2020-12-27 标签 html java 数据库 ide ui 翻译 日志 htm 对象 blog 栏目 HTML 繁體版 原文 https://www.cnblogs.com/-b ...
- [转帖]银河麒麟服务器操作系统V10SP1-x86_64系统环境下部署aarch64虚拟机
文章目录 主机系统环境 搭建aarch64虚拟机环境 ①安装"虚拟系统管理器" ②编译安装Qemu for Aarch64 ③获取aarch64架构的qcow2镜像 ④使用qcow ...
- 感受 Vue3 的魔法力量
作者:京东科技 牛至伟 近半年有幸参与了一个创新项目,由于没有任何历史包袱,所以选择了Vue3技术栈,总体来说感受如下: • setup语法糖<script setup lang=" ...