hive 分区(partition)

 

Hive组织表到分区。它是将一个表到基于分区列,如日期,城市和部门的值相关方式。使用分区,很容易对数据进行部分查询。

例如,一个名为Tab1表包含雇员数据,如 id, name, dept 和yoj (即加盟年份)。假设需要检索所有在2012年加入,查询搜索整个表所需的信息员工的详细信息。但是,如果用年份分区雇员数据并将其存储在一个单独的文件,它减少了查询处理时间。

1、一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。
2、表和列名不区分大小写。
3、分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。

分区的作用是什么呢,我的理解就是可以更方便的管理数据,以及在查询的时候,做到快捷,准确。

比如说存储了一份日志文件,有好几个月,那我们这个时候,以一天或者一个星期为一个分区,到时候查看日志文件的时候,就可以到指定的时间段去查找,就很方便。

首先在创建表的时候,可以指定自己的分区的类型和字段。

 

create table psn5(
id INT,
name String,
hobby ARRAY<String>,
add MAP<String,String>)
PARTITIONED BY (SEX String)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':';

 

创建之后,当你导入数据的时候,需要制定分区,不然就会报错。

像这样才是正确的:    LOAD DATA LOCAL INPATH '../data.txt' INTO TABLE psn5 PARTITION (sex='girl');

LOAD DATA LOCAL INPATH '../data.txt' INTO TABLE psn5 PARTITION (sex='boy');

然后当我们创建分区之后,去hdfs上查看文件系统,会发现,psn5这个表下面有两个文件夹(sex=boy,sex=girl) 正好对应着两个分区的名字。

如果想要查询某个分区下的数据:

SELECT * FROM TABLENAME WEHRE sex='girl';

分区支持增加,删除等操作

Add Partitions

ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'][, PARTITION partition_spec [LOCATION 'location'], ...];

 

partition_spec:

  : (partition_column = partition_col_value, partition_column = partition_col_value, ...)

Rename Partition

Version information

As of Hive 0.9.

ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;

 

Drop Partitions

ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]

  [IGNORE PROTECTION] [PURGE];            -- (Note: PURGE available in Hive 1.2.0 and later, IGNORE PROTECTION not available 2.0.0 and later)

You can use ALTER TABLE DROP PARTITION to drop a partition for a table. This removes the data and metadata for this partition. The data is actually moved to the .Trash/Current directory if Trash is configured, unless PURGE is specified, but the metadata is completely lost (see Drop Table above).

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值