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 ...)]
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。