Hive之partition

概述

hive的partition可以认为是RMDB中的分区,目的是query时减少全表扫描。

使用:

创建分区:

create EXTERNAL TABLE  IF NOT EXISTS p(
id STRING COMMENT 'id'
) partitioned by (seq int)
STORED AS SEQUENCEFILE 
LOCATION 'hdfs:///hive/hdfs/p/';

当数据插入的时候会以hdfs:///hive/hdfs/p/为基础构建以分区=值为名的目录

使用分区:

insert into table p partition(seq=1) select count(1) from dual;

此时会形成hdfs:///hive/hdfs/p/seq=1/数据 的文件目录格式,在insert into的时候需要指定分区否则会报如下错误:

Need to specify partition columns because the destination table is partitioned

 

查询操作:

select * from p where seq=1

可以使用多个分区:

create EXTERNAL TABLE  IF NOT EXISTS pp(
id STRING COMMENT 'id'
) partitioned by (seq int,num int)
STORED AS SEQUENCEFILE 
LOCATION 'hdfs:///hive/hdfs/pp/';

此时如果写入数据指定了分区那么就会形成hdfs:///hive/hdfs/pp/seq=值/num=值/数据 的目录结构

查询分区:

可以查询某表具有的分区:

show partitions pp;

 可以基于分区删除数据:

ALTER TABLE pp DROP PARTITION (seq=1,num=1);

pp为外部表那么其元数据被删除,真实数据扔存在,可以通过hadoop fs查看到

 

ps:

1.执行insert overwrite 的时候指定分区中的数据会被删除,其他分区数据不受影响

2.一个表可以有多个分区,分区列是伪劣不是真实存在的列以目录的形式存在

3.导入数据:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

猜你喜欢

转载自snv.iteye.com/blog/2085030
今日推荐