您的位置:首页 > 其它

hive中Partition详解

2016-07-16 15:15 741 查看
在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。

例如:pvs 表中包含 ds 和 city 两个 Partition,则

对应于 ds = 20090801, ctry = US 的 HDFS 子目录为:/wh/pvs/ds=20090801/ctry=US;

对应于 ds = 20090801, ctry = CA 的 HDFS 子目录为;/wh/pvs/ds=20090801/ctry=CA

添加分区:

用户可以用 ALTER TABLE ADD PARTITION 来向一个表中增加分区。当分区名是字符串时加引号。

ALTER TABLE page_view ADD

PARTITION (dt='2008-08-08', country='us')

location '/path/to/us/part080808'

PARTITION (dt='2008-08-09', country='us')

location '/path/to/us/part080809';

删除分区:

用户可以用 ALTER TABLE DROP PARTITION 来删除分区。分区的元数据和数据将被一并删除。

基于分区的查询:

一般 SELECT 查询会扫描整个表(除非是为了抽样查询)。但是如果一个表使用 PARTITIONED BY 子句建表,查询就可以利用分区剪枝(input pruning)的特性,只扫描一个表中它关心的那一部分。Hive 当前的实现是,只有分区断言出现在离 FROM 子句最近的那个WHERE 子句中,才会启用分区剪枝。例如,如果 page_views 表使用 date 列分区,以下语句只会读取分区为‘2008-03-01’的数据。

SELECT page_views.*

FROM page_views

WHERE page_views.date >= '2008-03-01'

AND page_views.date <= '2008-03-31';
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: