码迷,mamicode.com
首页 > 其他好文 > 详细

Hive分区表

时间:2019-07-25 17:38:46      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:use   select查询   oltp   hda   struct   分区空间   类型   space   for   

分区表
 
在Hive Select查询中,一般会扫描整个表内容(HDFS上文件的内容),会消耗很多时间做没必要的工作。分区表指的是在创建表时,指定partition的分区空间。
 
庞大的数据集可能需要耗费大量的时间去处理。在许多场景下,可以通过分区或切片的方法减少每一次扫描总数据量,这种做法可以显著地改善性能。
 
数据会依照单个或多个列进行分区,通常按照时间、地域或者是商业维度进行分区。比如vido表,分区的依据可以是电影的种类和评级,另外,按照拍摄时间划分可能会得到更一致的结果。为了达到性能表现的一致性,对不同列的划分应该让数据尽可能均匀分布。最好的情况下,分区的划分条件总是能够对应where语句的部分查询条件。
 
  Hive的分区使用HDFS的子目录功能实现。每一个子目录包含了分区对应的列名和每一列的值。但是由于HDFS并不支持大量的子目录,这也给分区的使用带来了限制。我们有必要对表中的分区数量进行预估,从而避免因为分区数量过大带来一系列问题。
 
  Hive查询通常使用分区的列作为查询条件。这样的做法可以指定MapReduce任务在HDFS中指定的子目录下完成扫描的工作。HDFS的文件目录结构可以像索引一样高效利用。
 
 
 
分区表的语法:
 
create table tablename
name string
)
partitioned by(key type,…)
 
示例:
 
create table if not exists employees(
name string,
salary string,
subordinates array<string>,
deductions map<string,float>,
address struct<street:string,city:string,state:string,zip:int>
)
partitioned by (dt string,type string) //制定分区
row format delimited fields terminated by ‘\t‘ //指定字段分隔符为tab
collection items terminated by ‘,‘ //指定数组中字段分隔符为逗号
map keys terminated by ‘:‘ //指定字典中KV分隔符为冒号
lines terminated by ‘\n‘ //指定行分隔符为回车换行
stored as textfile //指定存储类型为文件
;
 
查看刚才建立的分区
SHOW PARTITIONS employees;
 
 
 
 
a ... .. |.. . . . .. . a100
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 
create table 弱天气 (id 天气类型 类型规范 气象数据 。。。。。。。 ); -----/usr/hive/warehouse/弱天气
part....... 雨 /usr/hive/warehouse/rain
part....... 雪 (1 雪 10020 30mm/h ............) /usr/hive/warehouse/snow
part....... 风 /usr/hive/warehouse/wind
part....... 霜 /usr/hive/warehouse/shuang
part....... 雷电 /usr/hive/warehouse/light
part....... 雾 /usr/hive/warehouse/wu
part....... 霾 /usr/hive/warehouse/mai
 
1 雪 10020 30mm/h ............
2 雨 10019 60mm/h ............
 
range
 
 
oltp 联机在线事务处理系统
olap 联机在线决策支持系统
dss/dw 离线或非联机决策支持系统
 
所谓数据仓库指的就是所存储数据经过特殊处理(ETL)后汇总到某一容器中,以供决策支持调用。
 
 
 
create table people (id char(18),name varchar(100),sex char(4),birthday date);
partitioned by (local string)
 
13亿数据中找到所有的吉林人
 
 
select * from people where local=‘吉林‘;
 
如果在不分区的情况下我需要到13亿条数据中逐条寻找吉林的数据
 
如果在分区的情况下 我只需要到local下的吉林区间里去找就可以了 大大的缩小了查询范围
 

Hive分区表

标签:use   select查询   oltp   hda   struct   分区空间   类型   space   for   

原文地址:https://www.cnblogs.com/dasiji/p/11245542.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!