Hive的数据模型-分区表


需求

select * from t1  where xxxx;
这是全表扫描的。实际应用中,有时候不一定需要全表扫描。
比如电信的日志文件,一个表里存了从去年到现在的日志文件,那是很多很大的,实际需求要查今天的,如果用上面的sql,要全部扫描,很耗时间和机器资源,怎么办?
可以把文件分区存放,比如按天划分,查询时,指定分区。于是,分区表出来了。


概述

分区可以理解为分类,通过分类把不同类型的数据放到不同的目录下。
分类的标准就是分区字段,可以一个,也可以多个。
分区表的意义在于优化查询。查询时尽量利用分区字段。如果不使用分区字段,就会全部扫描。


语法

建表

CREATE TABLE tmp_table #表名
(
title   string, # 字段名称 字段类型
minimum_bid     double,
quantity        bigint,
have_invoice    bigint
)COMMENT '注释:XXX' #表注释
 PARTITIONED BY(pt STRING) #分区表字段(如果你文件非常之大的话,采用分区表可以快过滤出按分区字段划分的数据)
 ROW FORMAT DELIMITED 
   FIELDS TERMINATED BY '\t'   # 字段是用什么分割开的
STORED AS SEQUENCEFILE; #用哪种方式存储数据,SEQUENCEFILE是hadoop自带的文件压缩格式


修改表

alter table t2 add partition(class='job5');


hive>SHOW PARTITIONS t3 [partition (province='beijing')];


hive>ALTER TABLE t3 ADD [IF NOT EXISTS] PARTITION(...) LOCATION '...';


hive>ALTER TABLE t3 DROP PARTITION(...);


实验

准备文件

[root@hello110 data]# cat  partition_test;
1       dddd    dddd
2       www     www
3       eeee    wwww
4       tttt    cccc
5       yyycc   dddd

创建表

hive (zmgdb)> create table p_t1(name string,post string,address string)
            > partitioned by (city string)
            > row format delimited fields terminated by '\t'
            > ;

OK
Time taken: 0.106 seconds

导入数据到北京分区

hive (zmgdb)> load data local inpath '/data/partition_test' into table p_t1 partition(city='beijing');
Loading data to table zmgdb.p_t1 partition (city=beijing)

OK
Time taken: 0.577 seconds

导入数据到宁波分区
hive (zmgdb)> load data local inpath '/data/partition_test' into table p_t1 partition(city='ningbo');
Loading data to table zmgdb.p_t1 partition (city=ningbo)

OK
Time taken: 0.403 seconds

导入数据到台州分区
hive (zmgdb)> load data local inpath '/data/partition_test' into table p_t1 partition(city='taizhou');
Loading data to table zmgdb.p_t1 partition (city=taizhou)

OK
Time taken: 0.343 seconds

显示分区

hive (zmgdb)> show partitions p_t1;
OK
partition
city=beijing
city=ningbo
city=taizhou
Time taken: 0.083 seconds, Fetched: 3 row(s)

查看全部数据,全表
hive (zmgdb)> select * from p_t1;
OK
p_t1.name       p_t1.post       p_t1.address    p_t1.city
1       dddd    dddd    beijing
2       www     www     beijing
3       eeee    wwww    beijing
4       tttt    cccc    beijing
5       yyycc   dddd    beijing
1       dddd    dddd    ningbo
2       www     www     ningbo
3       eeee    wwww    ningbo
4       tttt    cccc    ningbo
5       yyycc   dddd    ningbo
1       dddd    dddd    taizhou
2       www     www     taizhou
3       eeee    wwww    taizhou
4       tttt    cccc    taizhou
5       yyycc   dddd    taizhou
Time taken: 0.105 seconds, Fetched: 15 row(s)

按分区查询,查宁波分区,city='ningbo' 是分区

hive (zmgdb)> select * from p_t1 where city='ningbo';
OK
p_t1.name       p_t1.post       p_t1.address    p_t1.city
1       dddd    dddd    ningbo
2       www     www     ningbo
3       eeee    wwww    ningbo
4       tttt    cccc    ningbo
5       yyycc   dddd    ningbo
Time taken: 0.723 seconds, Fetched: 5 row(s)





























hive>SHOW PARTITIONS t3 [partition (province='beijing')];


hive>ALTER TABLE t3 ADD [IF NOT EXISTS] PARTITION(...) LOCATION '...';


hive>ALTER TABLE t3 DROP PARTITION(...);




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

松门一枝花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值