Hive分区值的插入

对于Hive分区表,在我们插入数据的时候需要指定对应的分区值,而这里就会涉及很多种情况。比如静态分区插入、动态分区插入、提供的分区值和分区字段类型不一致,或者提供的分区值是NULL的情况,下面我们依次来展现下不同情况下的表现。

1. 静态分区和动态分区

假如建表如下:

create table tbl_name(xxx) partitioned by(pt xxx, online xxx);

Hive默认是静态分区,即明确指定分区值,写法如下:

insert overwrite table tbl_name partition(pt=20121023, if_online=1)

select field1, field2, ..., fieldn

from tbl where xxx;

有时,我们就需要使用动态分区,因为需要根据某些字段来选择插入对应的分区里,不能指定分区值。首先要开启动态分区设置:

set hive.exec.dynamic.partition=true;

set hive.exec.dynamic.partition.mode=nonstrict;

然后写法如下(注意select最后的字段值就是对应这分区值):

insert overwrite table tbl_name partition(pt, if_online)

select field1, field2, ..., pt, if_online

from tbl where xxx;

动态分区与静态分区还有一个细微的差别是,静态分区一定会创建分区,不管SELECT语句的结果有没有数据。而动态分区,只有在SELECT结果的记录数>0的时候,才会创建分区。因此在不同的业务场景下,可能会选择不同的方案。静态和动态并不是分区的属性,而只是指定值与不指定值的区别。另外可以混合使用动态和静态分区,不过要注意,静态分区列一定要在动态分区列前面。

2. 提供的分区值和分区字段类型不一致

这会导致数据会被插入到对应的分区值里,show partitions xxx也能显示出对应的分区值,但是在s查询时,有可能分区值是NULL,是不是NULL要看分区字段类型是否能兼容提供的分区值。

比如:

情况1:分区字段类型是int,提供的分区值是string(含有非数字)

create table t2(a int, b string) partitioned by(dt int);

insert into t2 partition(dt='2222') values(1, 'xxxx');

insert into t2 partition(dt='asd') values(2, 'xxxx');

情况2:分区字段类型是string,提供的分区值是int

create table t3(a int, b string) partitioned by(dt string);

insert into t3 partition(dt=111) values(2, 'xxxx');

insert into t3 partition(dt='asd') values(1, 'xxxx');

3. 提供的分区值是NULL

只有动态分区才能提供分区值是NULL的情况,即

Insert into table partition(分区字段) select f1,f2...分区值 from xxx

然后分区值又没有值,即是null的情况下,这会导致Hive写入到默认分区 __HIVE_DEFAULT_PARTITION__里去。

相关推荐
沃达德软件13 小时前
重点人员动态管控系统解析
数据仓库·人工智能·hive·hadoop·redis·hbase
xianyinsuifeng14 小时前
RAG + Code Analysis 的标准路线
数据仓库·自动化·云计算·原型模式·aws
ruxshui15 小时前
个人笔记: 星环Inceptor/hive普通分区表与范围分区表核心技术总结
hive·hadoop·笔记
2501_9272835817 小时前
仓库升级进行时:当传统仓储遇到“四向穿梭车”
数据仓库·人工智能·自动化·wms·制造
Gain_chance18 小时前
26-学习笔记尚硅谷数仓搭建-DIM层特殊的维度表——用户维度表的建表、分析及DIM层数据装载脚本
数据仓库·hive·笔记·学习
TTBIGDATA1 天前
【Hue 】Hue 访问 YARN 返回 403 权限问题
大数据·hadoop·ambari·hdp·国产化·hue·bigtop
TTBIGDATA1 天前
【Knox】Knox 转发访问 Trino Web UI 返回 406 错误的原因与处理
大数据·运维·前端·hadoop·ui·ambari·hdp
Gain_chance2 天前
25-学习笔记尚硅谷数仓搭建-DIM层其余(优惠卷、活动、地区、营销坑位、营销渠道、日期)维度表建表语句、简单分析
数据仓库·笔记·学习
小邓睡不饱耶2 天前
Hadoop:从架构原理到企业级实战,大数据处理入门到精通
大数据·hadoop·架构
Francek Chen2 天前
【大数据基础】大数据处理架构Hadoop:03 Hadoop的安装与使用
大数据·hadoop·分布式·架构