hive静态分区与动态分区的区别

分区表(重要):

**分区:**就是在表的目录下根据一些特定的条件再创建一些子目录,这些子目录下有我们原始数据的划分号的一部分数据。
查询时我们可以通过分区列和常规列来查询,大大提高查询速度。
分区又分为是动态分区和静态分区
但是不管是静态还是动态,都要先创建分区表(创表方式一样):
最好创建外部表,安全,

create external table if not exists A(
id string,
name string,
age string
)
partitioned by (sex string)
row format delimited
fields terminated by ','
stored as textfile;
location '表数据目录'

注意:根据创建的表中的某个字段进行分割时,在创建表时不可以在添加这个字段,如上表中根据sex分区,创建的表的字段不能再有sex
表创建完成后,我们要导入数据,然后映射出一张表,供我们后期使用:
此时静态分区和动态分区才会有很大的不同,或者说是依据导数据的方式来判断 是动态分区还是静态分区:
静态分区:
如果是一个完整的大文件
此时可以使用如下方法导入:

//注意查询的字段要与创建分区表时的字段一致
//产生一级子目录,需手动创建每一个分区,当分区交多时,麻烦
insert into employee_hrpar partition(sex='male') select id,username,bir from ods_users where sex='male';
insert into employee_hrpar partition(sex='female') select id,username,bir from ods_users where sex='female';
load data local inpath '/opt/datas/dept.txt' into table ods_users partition(sex='male');
//产生二级子目录
insert into empar partition (year=2015,month=11) select name,id,number from employee_hr where year(start_date)=2015 and month(start_date)=11;
load data local inpath '/opt/datas/dept.txt' into table dept_partition2 partition(year='2019', month='12');

动态分区:
首先设置这两个配置:(短暂性设置,关闭后需重新设置)
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
创建分区表都是上面的创建方式
添加数据的方式如下:
再次之前可以使用groupby 或者 distinct 了解下数据信息,方便下面的分区.
方式:

//不需要手动一个一个分区,可以根据关键字自动分区。
//此时select中的字段要和创建表时的字段加上partition的关键字的一致。根据一个字段分区
insert into myuser partition(sex) select * from ods_users;
//根据两个字段分区
insert into empar partition(year,month) select name,id,number,year(start_date),month(start_date) from employee_hr;

静态分区:是自己定义数据 多用于增量表(不断增加表的内容)比如新闻表,每天都会变化增加需要事先知道有多少分区,每个分区都要手动插入。
动态分区:事先先用group 或者distinct 看一下字段值的种类
多用于每年 每月 每日 等 多用于全量导入 数据量不能太大

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值