登录    关于
马育民老师的博客

马育民的博客

QQ:65242847

hive教程:动态分区表

案例

气象站的气温数据,根据年份分区之后,还要根据月份分区,还要根据日期分区

将数据上传到表中,手动去指定分区显然是不现实的

此时就用到 动态分区表

动态分区表

动态分区表,往表中插入数据的时候,动态的根据 ,将数据放入各个的分区中

会自动在 hdfs 上创建目录

与静态分区表区别

静态分区表需要先添加分区,插入数据时,指定分区

创建分区表

动态分区表与静态分区表相同,

  • 开启动态分区,静态分区表就变成动态分区表。动态分区 区分 严格模式非严格模式

  • 关闭动态分区,动态分区表就变成静态分区表

创建表

与 静态分区表相同

create table user_article3( uid int, aid int)
partitioned by (`date` string)
row format delimited fields terminated by ',';

静态分区

设置静态分区

set hive.exec.dynamic.partition=false;

静态分区,不能根据插入的数据,动态的生成分区,执行会报错

INSERT into table user_article3(uid,aid,`date`) values (103,1634,'20200108');

静态分区模式下,插入数据,必须手动指定要插入到哪个分区中

insert into table user_article3 partition(`date`='20200107') (uid,aid) values ('200','2001')

动态分区、严格模式

开启动态分区

set hive.exec.dynamic.partition=true;

设置严格模式

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

下面sql能够正确执行

INSERT into table user_article3(uid,aid,`date`) values (103,1634,'20200108');

下面sql报错

insert into table user_article3 partition(`date`) (uid,aid,`date`) values ('200','2001','20200106')

多个动态字段

严格模式下,至少有一列是静态,静态的意思是:指定分区

insert into table user_article3 partition(`date`='20200103',`hour`) (uid,aid,`hour`) values ('200','2001','12');

动态分区、非严格模式

开启动态分区

set hive.exec.dynamic.partition=true;

设置非严格模式

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

插入数据时,可根据分区字段的值,自动进行分区、创建hdfs上目录

INSERT into table user_article3(uid,aid,`date`) values (103,20001,'20200108');

下面sql也能够运行

insert into table user_article3 partition(`date`) (uid,aid,`date`) values ('200','2001','20200106')

参考博文:
https://blog.csdn.net/weixin_43614067/article/details/108637441

https://www.cnblogs.com/shaoyayu/p/13434274.html

https://blog.csdn.net/weixin_39182877/article/details/79119004


原文出处:http://malaoshi.top/show_1IXmxXx8NuF.html