Hive之管理表 外部表 分区表
2016-10-29 18:36
260 查看
一Hive 创建表的三种方式
1.1普通创建
1.2查询语句创建
CREATETABLE IF NOT EXISTS ext_1 AS SELECT deptno,dname,loc FROMdept;1.3like创建
CREATETABLE IF NOT EXISTS ext_like like emp;二 内部表与外部表的比较
Hive表概念和关系型数据库表概念差不多。在Hive里表会和HDFS的一个目录相对应,这个目录会存放表的数据。目录默认是/usr/hive/warehouse/.比如你在hadoop09数据库创建了emp表,那么HDFS
/user/hive/warehouse/hadoop09.db/emp就会有这个目录来存放表里的数据。
管理表:管理表又被称之为内部表,他只管理着数据生命周期,当我们删除这张表时,元数据和真是存储的数据都会被删除,也就是说HDFS所对应的表目录应该被删除。
管理表有一个缺点:就是不方便和其他工作共享数据。
现在有几个问题:
1多个人同时在使用这张表,然后某个人不小心,把表删掉了,其他人都用不了了。
2其他工具产生的数据在某个HDFS某个目录,但是Hive想去查询这些数据,但是并没有给Hive数据所有权。
因此,hive里就提供了如果数据被多个工具共享,我们可以创建外部表
外部表:删除该表时,只会删除元数据信息,但是不会删除真正的数据。也就是说外部表数据并不是由他自己管理的。
CREATEEXTERNAL TABLE dept_external(
deptno int,
dname string,
loc string
)
ROWFORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION'/user/hive/warehouse/hadoop09.db/dept';
LOCATION:告诉Hive数据位于什么路径
三 分区表作用以及如何创建,更改
一般情况下,Hive 一个简单的查询会扫描整张表,对一张大表而言,会降低性能,我们可以使用分区来解决,他也是类似于关系型数据库表的分区。在Hive里分区都适合预定义的列相关的,作为子目录存在于在表的目录里。当表查询时,WHERE子句里的谓词就是分去过滤器,然后只查询相关的分区的数据返回,而不是查询整个表。
首先,我们创建一个分区表:
然后添加分区
ALTERTABLE emp_partition ADD IF NOT EXISTS PARTITION (country='America',state='CA');
ALTERTABLE emp_partition ADD IF NOT EXISTS PARTITION (country='Canada',state='MH');
这时候,HDFS就会新增这样的2个目录
/user/hive/warehouse/hadoop09.db/emp_partition/country=America/state=CA
http://hadoop09-/user/hive/warehouse/hadoop09.db/emp_partition/country=Canada/state=MH
我们也可以指定partition在不在表这个目录里。
ALTERTABLE emp_partition ADD IF NOT EXISTS PARTITION (country='China',state='BJ')LOCATION '/locate/partition';
我么这时候查询分区情况:
showpartitions emp_partition;
四 如何向分区表加载数据
loaddata local inpath '/opt/software/hive/emp.txt' into table emp_partitionpartition(country='America',state='CA');
loaddata local inpath '/opt/software/hive/emp.txt' into table emp_partition
partition(country='China',state='BJ');
然后我们去检查/locate/partition是否有数据呢?
有数据吧。
五 如何检索分区表数据
在添加分区之后,表里的字段会增加对应的虚拟字段,以供查询使用。比如我们上面的例子,就会增加country和 state两个字段。
SELECT* FROM emp_partition WHERE country='China';
相关文章推荐
- Hadoop学习笔记(十八)---Hive内部表,外部表,分区表,桶表
- Hive中管理表(内部表)和外部表的区别是什么,及分区表使用场景
- hive 分区表、外部表、桶表
- Hive外部分区表加载flume打到hdfs上文件,读不到.tmp文件
- Hive内部表、外部表、分区表以及外部分区表创建以及导入数据实例讲解
- Hive外部分区表加载flume打到hdfs上文件,读不到.tmp文件
- hive 采用JDBC编码方式获取外部分区表数据
- 分区表,桶表,外部表,以及hive一些命令行小工具
- Hive入门--2.分区表 外部分区表 关联查询
- Hive的表的创建及外部表、分区表介绍
- Hive学习笔记 3 Hive的数据模型:内部表、分区表、外部表、桶表、视图
- hive 分区表、桶表和外部表
- Hive笔记三之内部表,外部表,分区表,桶表
- Hive外部分区表加载flume打到hdfs上文件,读不到.tmp文件
- Hive关于内部表外部表以及分区表数据删除总结
- hive 建表,建外部表,建分区表
- hive中的内部表、外部表、分区表
- Hive建Hdfs外部分区表
- Hive创建外部分区表
- Hive内部表、外部表、分区表介绍