需求

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(...);

Hive的数据模型-分区表相关推荐

  1. hive 操作(三)——hive 的数据模型

    Hive 基础及安装 Hive 操作(一) hive 操作(二)--使用 mysql 作为 hive 的metastore hive 操作(三)--hive 的数据模型 hive 操作(四) 大的分类 ...

  2. 在大数据世界里打小怪之Hive的数据模型

    hive是什么呢?如果用它的百度概念,那就是: hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapRedu ...

  3. Hive精华问答 | Hive的数据模型是怎样的?

    Hive是一个数据仓库基础工具,它是建立在Hadoop之上的数据仓库,在某种程度上可以把它看做用户编程接口(API),本身也并不存储和处理数据,依赖于HDFS存储数据,依赖MR处理数据.它提供了一系列 ...

  4. hive中的分区表与视图

    Hive主要由用户接口模块.驱动模型以及元数据存储模块3个模块组成: 用户接口模块   用户接口模块包括CLI.Hive网页接口(Hive Web Interface,HWI).JDBC.ODBC.T ...

  5. hive的动态分区表的创建及数据的导入

    动态分区流程: ①建一个动态分区表 ②建一个临时表(分区字段作为临时表的表内字段) ③将数据导入临时表中 ④根据临时表中的数据含有的动态分区字段的值进行数据加载并 动态分区 -- 设置属性 set h ...

  6. [Hive基础]-- 创建分区表

    一.为什么要创建分区表 1.select查询中会扫描整个表内容,会消耗大量时间.由于相当多的时候人们只关心表中的一部分数据, 故建表时引入了分区概念. 2.hive分区表:是指在创建表时指定的part ...

  7. Hive基础之分区表

    我们在做数据挖掘和分析的时候有时候只是针对某一段时间或者某一个月的数据,而我们在创建表的时候是将所有时间的数据都放在一起,这样就会导致我们在进行分析的时候会分析所有的数据,如果数据量很大的时候效率就会 ...

  8. Hive的数据模型—桶表

    概述 桶表是对数据进行哈希取值,然后放到不同文件中存储. 数据加载到桶表时,会对字段取hash值,然后与桶的数量取模.把数据放到对应的文件中. 物理上,每个桶就是表(或分区)目录里的一个文件,一个作业 ...

  9. Hive的数据模型-外部表

    概述 包含External 的表叫外部表 删除外部表只删除metastore的元数据,不删除hdfs中的表数据 外部表 只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数 ...

最新文章

  1. Ajax简单的请求数据以表格的形式渲染到页面
  2. Thundernet
  3. Spring中类路径下文件读取方式
  4. 张似玫计算机系,计算机系举办“音律飞扬”卡拉OK大赛决赛
  5. flash 火狐总是崩溃_win10系统火狐flash插件总是崩溃的解决方法
  6. 2.1依赖概念之前的预备--war、jar包内部结构
  7. 数据结构与算法 第二章 数据结构中的线性结构
  8. 【Webcam设计】相机底层工作流程,编程模型
  9. 数据产品中的图表设计原则和方法
  10. InSAR数据处理软件简介
  11. 有机会向面试官提问时,你应该问这 11 个问题
  12. 阿里云EMAS移动测试|快速掌握移动端兼容性测试技巧
  13. 浅谈互联网行业发展趋势及现状
  14. 关于Rigidbody,Collider和CharacterController三者之间的关系和用法的总结
  15. Kali-现代化工具基础建设
  16. 2018.11~2019.4马拉松训练计划
  17. 白中英计算机组成原理第五版视频,白中英《计算机组成原理》第5版考研教材及真题视频讲解...
  18. 教材作者告北大教授《操作系统教程》抄袭案获胜诉
  19. creo打不开stp文件_proe(creo)转为STP格式保证颜色不变方法
  20. 以亲身经历浅谈软件实现前“凡事三问”的重要性---欢迎大家分享自己的经历和感悟!

热门文章

  1. 强行终止python_中国的真实离婚率:一点也不高,反而低的惊人 | 用python计算离婚率...
  2. linux nls_lang oracle,linux操作系统环境变量LANG和NLS_LANG的区别
  3. php array colum,php5.5新数组函数array_column使用
  4. 《软件需求分析(第二版)》第 11 章——一图胜千言 重点部分总结
  5. c语言2048项目报告,c语言----项目_小游戏2048
  6. linux db2 归档,DB2的归档模式设置方法
  7. reboot mysql fail_mysql 5.7.18,在系统重启后,为什么无法启动?
  8. v380智能快配连接不上怎么办_Win7系统电脑设置连接远程桌面的操作方法
  9. c语言如何判断是否是子序列,leetcode392(判断子序列)--C语言实现
  10. linux怎么运行g77,Linux安装g77编译器的技巧