Hive的管理表,分区表和外部表

1、管理表

管理表也称为内部表,这种表或多或少的控制数据的生命周期,Hive在默认情况下会将这些表存储在配置项为hive.metastore.warehouse.dir所定义的目录中。管理表存在一些不足,不方便与其他工作共享数据,例如当有一份数据由pig或其他工具所创建并且主要由这一工具所使用,此时,如果我们需要hive对这份数据执行一些查询,可是并没有给予Hive对数据的所有权,我们可以再创建一个外部表指向该份数据,而不需要具备对其所有权。
创建一个管理表一般形式:

create table Testtable1(
	testid int,
	testname string,
	testvalue int
);

2、外部表

Hive不会认为外部表完全拥有他所指向的那份数据,也就是说当删除该外部表时,并不会删除该份数据,不过描述该表的元数据信息会被删除。与之不同的内部表,当删除该外部表时,hive也会删除这个表的数据
创建一个外部表一般形式:

create external table Testtable2(
	testid int,
	testname string,
	testvalue int
)
row format delimited fields teminated by ','
location '/data/test';

其中row format delimited fields teminated by ‘,’表示按照一个逗号来分割表,也可以换成其他的符号,location的话表示hive的数据会存在那个路径下。

3、分区表

为什么会存在分区表了?
通过分区来水平分散压力,将数据从物理上转移到和使用最频繁的用户最近的地方,在hive中分区表还存在分层存储。

3.1、分区内部表

假如公司的人员来自全世界,在查询中往往会使用带WHERE语句的查询,这样可以将结果限制在某个国家或某个省份,按country(国家),再按state(州)来对数据进行分区

create table employee(
	name string,
	salary float,
	subordinates array<string>,
	deductions map<string,float>,
	address struct<stree:string, city:string, state:string, zip:int>
)
partitioned by (country string, state string);

分区表会改变hive对数据存储的组织方式,如上所创建的这个表会创建一个employee的目录,并在这个目录下面,根据country和state的字段进行存储。对数据进行分区,最重要的原因就是为了更快的查询。可以用show partitions命令查看表中存在的所有分区。

show partitions employees;
//查看某特定分区下的分区
show partitions employees partition(country='US');
//其他命令显示分区建
describe extendedemployees;

3.2、分区外部表

外部表同样可以使用分区,通过alter table语句可以进行单独增加分区

alter table log_test add partition(year-2012,month=1,day=2)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值