HiveSQL 分区表

1. 分区表概念

当Hive表对应的数据量大、文件个数多时,为了避免查询时全表扫描数据,Hive支持根据指定的字段对表进行分区,分区的字段可以是日期、地域、种类等具有标识意义的字段。(因为HDFS是分布式文件存储系统,我们所看见的“表”的数据,很有可能来自好几个文件,这几个文件可能就是按照某个维度分好类的,只是我们在“表”中看见的是全部数据)

2. 分区表语法

分区字段不能是表中已经存在的字段,因为分区字段最终也会以虚 拟字段的形式显示在表结构上。

	create table table_name(
	column1 data_type,
	column2 data_type,
	···
)partitioned by(partition1 data_type,partition2 data_type,...);

3. 分区表加载数据

3.1 静态分区

用户在加载数据时手动指定,分区表实际上在底层管理数据方式发生了改变。每一个分区字段值作为文件夹名,该文件夹里面存放文件。

	load data [local] inpath 'filepath'into table tablename partition(分区字段='fenquzhi'...);
  • 分区的概念提供了一种将Hive表数据分离为多个文件/目录的方法。
  • 不同分区对应着不同的文件夹,同一分区的数据存储在同一个文件夹下。
  • 查询过滤的时候只需要根据分区值找到对应的文件夹,扫描文件夹下本分区的文件即可。
  • 这种指定分区查询的方式叫做分区裁剪。

3.2 多重分区

Hive支持多个分区字段partitioned by (partition1 data_type,partition2 data_type,...),多重分区下,分区之间是一种递进关系,可以理解为在前一个分区的基础上继续分区。从HDFS的角度来看,就是文件夹下继续划分子文件夹。

3.3 动态分区

动态分区指的是分区的字段值是基于查询结果(参数位置)自动推断出来的,核心语法就是inssert+select,启用Hive动态分区,需要在Hive会话中设置两个参数:

# 是否开启动态分区功能
set hive.exec.dynamice.partition=true;
# 指定动态分区模式,分为nonstick非严格模式和strict严格模式
# strict严格模式要求至少有一个分区为非静态分区
set hive.exec.dynamice.partition.mode=nonstrict;

3.4 注意事项

  1. 分区表不是建表必要语法规则,是一种优化手段表,可选。
  2. 分区字段不能是表中已有字段,不能重复。
  3. 分区字段是虚拟字段,其数据并不存储在底层文件中。
  4. 分区字段值的确定来自于用户手动指定(静态分区)或者根据查询结果位置自动推断(动态分区)。
  5. Hive支持多重分区,也就是说在分区的基础上继续分区,划分更加细的粒度。
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值