Hive动态分区表使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BAStriver/article/details/87980427

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

猜你喜欢

转载自blog.csdn.net/BAStriver/article/details/87980427
今日推荐