hiveSql-分区

hive中创建表分区:

 

分区什么时候用?

 

例子1:

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

 

例子2:

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

 

创建分区的代码

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

注意:

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

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’)

 

可以查看该表的数据:

hiveSql-分区_第1张图片

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

hiveSql-分区_第2张图片

查找分区中的数据:

通过上面的操作我们现在可以知道,在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,

address Map

)

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’)

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


你可能感兴趣的:(大数据-hive)