Hive之管理表 外部表 分区表

一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_partition

partition(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';


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

莫言静好、

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

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

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

打赏作者

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

抵扣说明:

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

余额充值