Hive 分区和分桶总结

2024-02-07 01:48
文章标签 总结 分区 hive 分桶

本文主要是介绍Hive 分区和分桶总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

分区和分桶总结

1、分区

1、分区介绍

2、分区表的操作

3、动态分区

2、分桶表

1、分桶表介绍

2、分桶表的操作

3、分区表和分桶表的区别

参考

分区和分桶总结

1、分区

1、分区介绍

由于数据量过于庞大,使用分区,可以并行的进行处理数据,有点类似于Hadoop当中的切片操作,将数据分开,然后并行去处理,避免去全表扫描。

分区表在生产环境当中用的非常多。分区表实际上就是对应一个在HDFS(或者是其他分布式文件系统)文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件,Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过where子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。

并且,分区的指定的列其实是伪列,意思是不是真是存在的列。

2、分区表的操作

       具体代码如下:

--建表语句
create table temp_table (
id string comment 'ID',
name string comment '姓名'
)comment '临时表'
partitioned by (day string);--导入数据语句
load data local path 'x' overwrite into table temp_table partition(day='2021-05-01');--增加分区
alter table temp_table add partition(day='2021-05-02') partition(day='2021-05-03');--删除分区
alter table temp_table drop partition(day='2021-05-02'),partition(day='2021-05-03');--查看分区
show partitions temp_table;

       重点需要注意的是partitioned后面的ed,并且,分区字段是不存在列里面的,是一个独立的字段。查询的时候就当作是一个列来进行查询即可。二级分区和一级分区同理,就不重复写了。

load不指定分区的时候,将会放入一个默认的文件夹当中,有时候也会报错,一般需要指定分区。

3、动态分区

不指定固定的分区,而是,根据查询得到的分区字段去进行分区。是按照查询的最后一个字段来作为分区字段,在配置为严格模式下,不能进行动态分区,需要更改配置(Hive版本3之后可以省略partition,默认以最后的字段为分区字段)。代码如下:

insert table temp_table partition(day)
select name, day from temp_table;--配置的信息是
hive.exec.dynamic.partition.mode=nonstrict

2、分桶表

1、分桶表介绍

分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可以形成合理的分区。对于一张表或者分区,Hive可以进一步组织成桶,也就是更为细粒度的数据范围划分。

分桶是将数据集分解成更容易管理的若干部分的另一个技术。一般用于数据集极大的情况,进行抽样查询。

分区针对的是数据的存储路径,分桶针对的是数据文件。

只能对一列进行分桶。表可以同时分区和分桶,当表分区时,每个分区下都会有<num_buckets> 个桶。当使用 SORTED BY … 在桶内排序时,指定排序的列和指定分桶的列无需相同。而且分桶表中插入数据的时候必然要执行一次MAPREDUCE,所以分桶表的数据只能通过从结果集查询插入的方式进行导入。

数据分桶的原理:

按照分桶字段的hash值去模除以分桶的个数。当join连接的字段值取hash不够均匀时,多取一个其它字段作为分桶字段;

bucket num = hash_function(bucketing_column) mod num_buckets

2、分桶表的操作

具体代码如下:

--创建分桶表
create table stu_buck(id int, name string)
clustered by (id)   --注意必须要用存在的列
into 4 buckets  --指定桶的个数
row format delimited fields terminated by '\t';

注意:

hive.enforce.bucketing为true时,reduce要设为-1;

hive.enforce.bucketing为false时,reduce要设为和分桶数一致;

如果bucketing为 true,reduce又设成大于1的输,会执行两个job。

3、分区表和分桶表的区别

分区和分桶最大的区别就是分桶随机分割数据库,分区是非随机分割数据库。

因为分桶是按照列的哈希函数进行分割的,相对比较平均;而分区是按照列的值来进行分割的,容易造成数据倾斜。其次两者的另一个区别就是分桶是对应不同的文件(细粒度),分区是对应不同的文件夹(粗粒度)。

当然,分区和分桶可以一起使用。

参考

https://www.bilibili.com/video/BV1EZ4y1G7iL?p=66

https://www.freesion.com/article/23851409747/

 

这篇关于Hive 分区和分桶总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/686180

相关文章

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解