hive中的分区主要是分目录,把一个大的数据集根据业务需要分割成小的数据集
一、静态分区
1.创建分区表:
建表语句后加入 partitioned by ( day string )
2.加载数据到分区表:
加载数据语句最后加上 partition(day='20220403')
分区表记载数据的时候必须指定分区
3.查询单分区数据:
可以在 wehre 语句后加 分区信息 day='20220403'
4.多分区查询:
可以用 union 连接
5.增加分区:
alter table 表名 add partition(day='20200404') ;
alter table 表名 add partition(day='20200405') partition(day='20200406');
6.删除分区:
alter table 表名 drop partition(day='20200404') ;
alter table 表名 drop partition(day='20200405') partition(day='20200406');
7.查看分区表里分区个数:
show partitions 表名;
8.查看分区表结构:
desc formatted 表名;
9.二级分区:
建表:建表语句后加入 partitioned by ( day string , hour string)
加载数据:加载数据语句最后加上 partition(day='20220403',hour='12')
10.让分区表与数据相关联的三种方法(把数据直接上传到分区目录,元数据并未更改):
1.上传数据后执行修复命令:msck repair table 表名;
2.上传数据后执行添加分区:alter table 表名 add partition();
3.创建文件夹后load数据到分区
二、动态分区
1.开启动态分区功能:
hive.exec.dynamic.partition=true
2.设置为非严格模式:
hive.exec.dynamic.partition.mode=nonstrict
3.在所有执行的MR节点上设置创建最大动态分区个数:
hive.exec.max.dynamic.partitions=个数
4.在每个执行MR的节点上,最大可以创建多少个动态分区(分区数比字段数要大):
hive.exec.max.dynamic.partitions.pernode=个数
5.整个MR Job中,最大可以创建的HDFS文件个数(默认100000):
hive.exec.max.created.files=100000
6.空分区生成时,是否抛出异常(默认 false):
hive.error.on.empty.partition=false