Hive 分区表和分桶表

简介: Hive 分区和分桶的区别

前言

《Hive 建表语句解析》文章中,建表的时候我们可以使用 PARTITIONED BY 子句和 CLUSTERED BY 子句来创建分区表和分桶表,为什么要创建分区表和分桶表呢?分区表和分桶表有什么区别呢?

分区表

1. 为什么分区

在Hive 查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此为了避免Hive全表扫描,建表时引入了partition概念,来提高查询效率。

注意:

  1. 在逻辑上分区表与非分区表没差别,在物理存储上,分区表会将数据按照指定的分区列值存储在不同的子目录中。
  2. 分区是以字段的形式在表结构中存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。

2. 分区类型

分区分为动态分区和静态分区两种类型

  1. 静态分区:
    条件:需要明确指定分区列的值
    应用场景:非常适合每日增量数据抽取和计算的任务场景。
  2. 动态分区
    条件:设置如下参数
-- 1.打开动态分区模式:
set hive.exec.dynamic.partition=true;
-- 2.设置分区模式为非严格模式
set hive.exec.dynamic.partition.mode=nonstrict;

应用场景:不确定分区数量以及值的场景,比如初始化表的历史数据等。

分桶表

1. 分桶的作用

对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。

  1. 获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现。比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以大大较少JOIN的数据量。
  2. 使取样(sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。

总结

Hive 中分区和分桶的目的都是为了提高查询分析效率,在物理上划分数据范围,两者的区别是分桶可以在分区的基础上进行更细粒度的数据划分。

相关文章
|
1月前
|
SQL 存储 Oracle
【赵渝强老师】Hive的分区表
Hive的分区表与Oracle、MySQL类似,通过分区条件将数据分隔存储,提高查询效率。本文介绍了静态分区表和动态分区表的创建与使用方法,包括具体SQL语句和执行计划分析,附带视频讲解。静态分区表需显式指定分区条件,而动态分区表则根据插入数据自动创建分区。
166 1
|
SQL 存储 分布式计算
Hive学习---5、分区表和分桶表
Hive学习---5、分区表和分桶表
|
7月前
|
SQL 存储 传感器
Hive中的分区表和非分区表有什么区别?请解释其作用和使用场景。
Hive中的分区表和非分区表有什么区别?请解释其作用和使用场景。
245 0
|
SQL 文件存储 数据库
Hive分区表的新增字段数据为null的问题解决方法
Hive分区表的新增字段数据为null的问题解决方法
361 0
|
SQL HIVE
Hive创建分区表常用指令
Hive创建分区表常用指令
521 0
|
SQL 大数据 Apache
Apache Hive--DDL--创建表--分区表创建| 学习笔记
快速学习 Apache Hive--DDL--创建表--分区表创建
116 0
Apache Hive--DDL--创建表--分区表创建| 学习笔记
|
SQL 分布式计算 Hadoop
Hive分区表简介
如果一个表中数据很多,我们查询时就很慢,耗费大量时间,如果要查询其中部分数据该怎么办呢,这时我们引入分区的概念。 Hive中的分区表分为两种:静态分区和动态分区。
273 0
|
SQL 存储 数据库
hive分区表
Partition 对应于数据库的 Partition 列的密集索引 在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中 例如: test表中...
1196 0
|
SQL HIVE 关系型数据库
|
7月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
211 1