hive教程:动态分区表

案例

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

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

此时就用到 动态分区表

动态分区表

动态分区表,往表中插入数据的时候,动态的根据 值,将数据放入各个的分区中,不需要指定分区,如:

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

会自动在 hdfs 上创建目录

与静态分区表区别

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

insert into user_article partition(`date`='20200101' ) (uid,aid) values ('10','1002')

创建表

与 静态分区表相同

默认 创建的就是 动态分区表

create table user_article3(
    uid int,
    aid int
)
partitioned by (
    `date` string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

查看是否动态分区表

set hive.exec.dynamic.partition

执行结果如下:

hive.exec.dynamic.partition=true

说明是动态分区表

设置 全局动态分区

set hive.exec.dynamic.partition=true;

严格模式 和 非严格模式

默认动态表是 非严格模式,执行 HSQL 更加宽松

严格模式,有些 HSQL 语句不支持

严格模式

开启动态分区

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


原文出处:/show_1IXmxXx8NuF.html