Hive静态与动态分区表:数据插入对比与性能评估

创建分区表

1.静态分区表

create table parttable(id int,name string,age int)

partitioned by (sex string)

row format delimited

fields terminated by ','

lines terminated by'\n';

数据文件

vi parttable.txt

1001,zhangsan,19

1002,lisi,20

1003,wangwu,19

1004,lucky,21

load data local inpath '/home/parttable.txt' into table  parttable partition(sex='M');

通过select 查询

insert into table parttable partition(sex='W') values(1005,'cindy',20);

通过select查询

在hdfs内查看

打开自动分区,设置分区模式为非严格模式

set hive.exec.dynamic.partition=true;

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

2.动态分区表

create table parttable01(id int,name string,age int)

partitioned by (sex string)

row format delimited

fields terminated by ','

lines terminated by'\n';

通过命令可以将parttable里的内容装载到parttable01

insert into table parttable01

partition(sex)

select * from parttable;

一次命令就成功

Select 查询

在hdfs内查看

再次尝试血型表

use sy3;

重新创建血型动态分区表

create table blood(name string, sex int ,nation string, age int ,depart string,major string,height int,weigh int,xiongwei double,feihuoliang int,score int )

partitioned by (blood string)

row format delimited

fields terminated by ','

lines terminated by'\n';

ah表内有所有学生信息

insert into table blood

partition(blood)

select * from ah;

Select * from blood where blood=’A’;

hdfs查看

3.总结思考

静态分区 SP(static partition)
1、静态分区是在编译期间指定的指定分区名
2、支持load和insert两种插入方式
2.1load方式

1)会将分区字段的值全部修改为指定的内容

2)一般是确定该分区内容是一致的时候才会使用

2.2insert方式

1)必须先将数据放在一个没有设置分区的普通表中

2)该方式可以在一个分区内存储一个范围的内容

3)从普通表中选出的字段不能包含分区字段

3、适用于分区数少,分区名可以明确的数据

动态分区 DP(dynamic partition)

1、根据分区字段的实际值,动态进行分区

2、是在sql执行的时候进行分区

3、需要先将动态分区设置打开(set hive.exec.dynamic.partition.mode=nonstrict )

4、只能用insert方式

5、通过普通表选出的字段包含分区字段,分区字段放置在最后,多个分区字段按照分区顺序放置。

静态分区表和动态分区表的优缺点:

对于处理分区数比较少的数据,使用静态分区表或是动态分区表都可以。像血型分区或时间分区,分区个数比较多的数据,使用动态分区表,一条命令可以完成所有分区,十分便捷,高效。动态分区的缺点是使用前需要打开自动分区,设置分区模式为非严格模式。尝试使用load向静态分区表篇插入数据,发现是可行的,但命令需要像静态分区表一样,指定分区,相比insert更为复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小伍_Five

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值