1.有时候为了更方便地根据某个时间字段来进行增量更新数据,我们可以使用分区。而相对来说,这种时候用动态分区会多一些。
2.首先,先进入Hive命令行,输入一下的设置,打开动态分区功能:
set hive.exec.dynamic.partition =true;
-- 表示开启动态分区功能
set hive.exec.dynamic.partition.mode = nonstrict;
-- 表示允许所有分区都是动态的,否则必须有静态分区字段
3.下面为Hive动态分区参数:
set hive.exec.max.dynamic.partitions.pernode=100;
-- (默认100)表示每个maper或reducer可以允许创建的最大动态分区个数,默认是100,超出则会报错。
set hive.exec.max.dynamic.partitions =1000;
-- (默认1000)表示一个动态分区语句可以创建的最大动态分区个数,超出报错
set hive.exec.max.created.files =10000
-- (默认10000) 全局可以创建的最大文件个数,超出报错。
4.接下来,新建一个Hive表:
-- 普通不分区的Hive表
CREATE TABLE table_part(
field1 string,
field2 string,
time string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
-- 动态分区
CREATE TABLE table_part(
field1 string,
field2 string
)
PARTITIONED BY (time string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
其中,我们注意到,分区字段写在PARTITIONED BY中,在建表字段中就不用写了,这样建之后,time字段是补在最后面的。
5.查看表分区信息:
show partitions table_part;
6.删除表分区:
alter table table_part drop partition (time='2019-02');
7.查询分区数据:
select field1, field2 , time from table_part
where time='2019-02';
-- 分区显示数据
select field1, field2 , time from table_part distribute by time;
8.插入数据到分区表:
insert into table table_part partition(time)
select field1 , field2 , time from table;
-- 注:select 子句最后一列要为分区表的分区列
部分参考:
1.https://blog.csdn.net/zwjzqqb/article/details/79022251
2.https://blog.csdn.net/qq_26442553/article/details/80382174