hiveSql-分区

hive中创建表分区:

分区什么时候用?

例子1:

假如我有一个log日志表,我要对其建立分区的话,可以通过时间来建立分区,意思就是,我每天的数据都会存到一个目录中

例子2:

假如我这个日志表是不同类型的信息,我可以通过分区,对其分开进行管理

创建分区的代码

创建分区的代码要写在上面,如下,我写的是将性别进行分区

注意:

你不能写成 name String,也就是分区字段不能与创建表的字段一致,否则会报错
create table psn1(
id int,
name String,
likes Array<String>,
address Map<String,String>
)

partitioned by (sex String)
row format delimited
fields terminated by ','              //我们将上面的原始数据按照','进行分割,分成4个字段
collection items terminated by ‘-’ //我们将上面的第3个字段定义成了数组,因此要对该数组进行分割
map keys terminated by ‘:’         //我们将上面的第4个字段定义成了Map,因此要对Map进行分割

将数据存到分区表中:

load data local inpath ‘/~/~/~/data.txt’ overwrite into  table  psn1;

注意:

此时是会报错的,因为这个分区表里面有个分区字段性别(sex)

 

正确写法:

load data local inpath ‘/~/~/~/data.txt’ overwrite into table psn1 partition (sex=’boy’);

解释:

我将该数据存到了这个分区表中,并为该数据定义的分区是男孩,也就是该数据中的人,性别都是男的

此时我再将另外的数据存到该表中但是分区我定义的是girl

load data local inpath ‘/~/~/~/data1.txt’ overwrite into table 表名 partition (sex=’girl’)

可以查看该表的数据:

可以查看该表在hdfs上的表现:

查找分区中的数据:

通过上面的操作我们现在可以知道,在psn1这个表的下面此时有2个分区

查询指定分区’boy’分区下面的数据

select * from psn1 where sex=’boy’;

对表增加分区:

例如上面的psn1这个分区表,我对其新添加一个分区

alter table psn1 add partition(sex= ’weizhi’ )

意思就是我对这个分区的字段sex,新添加了一个分区weizhi(未知),可以将我的数据中不清楚是男是女的填入到该分区中。

删除表的分区:

如果是一个内部表的话,那么对应的该分区中的数据也会被清除

ALTER TABLE psn2 drop PARTITION (sex='weizhi');

创建表的时候添加2个分区字段

那么我添加数据的时候就不能写成一个了:

create table psn1(

id int,

name String,

likes Array<String>,

address Map<String,String>

)

partitioned by (sex String,age int)

row format delimited

fields terminated by ','

collection items terminated by '-'

map keys terminated by ':'

添加数据的时候就必须要指定2个分区字段了

load data local inpath ‘/~/~/~/data.txt’ overwrite into table psn1 partition

(sex=’boy’,age=1);

表示的是:我将该数据添加到是男孩,并且年龄是1的分区表中

注意:

这种多个分区字段的表,再hdfs上会生成一个主目录,sex=boy,再这个目录下面会有age=1这个目录。

所以删除的时候如下代码:

alter table psn1 add partition(sex= ‘boy’)

会将该主目录下的所有数据都会删除

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值