Hive:四大表类型内部表、外部表、分区表和桶表

本文介绍了Hive的四种表类型:内部表、外部表、分区表和桶表。内部表在删除时会连同数据一起消失,而外部表仅删除元数据,保留数据,适合共享。分区表用于大数据量场景,通过分区快速定位查询,提高效率。桶表则有助于解决数据倾斜问题,改善查询性能。

参考资料:

Hive(7):Hive四大表类型内部表、外部表、分区表和桶表

https://blog.csdn.net/u010886217/article/details/83796151

 

2.外部表

(1)适用情形:

  当一份日志需要多个小组一起分析,分析完了之后创建的表就可以删除了。但是普通的表删除的同时也会把数据删除,这样就会影响到其他小组的分析,而且日志数据也不能随便删除。所以,需要外部表,删除外部表,不会删除对应的hdfs上的数据

备注:

普通表,指的是内表,内表需要insert数据,如果删除内表,则所有数据都会被删除。

外表,使用hdfs上的txt文件,只要指定一下文件路径和分隔符即可。

(2)创建外部表

create EXTERNAL table dept_ext(
deptno int,
dname string,
loc string
)
row format delimited fields terminated by '\t' ;
load data local inpath '/opt/datas/dept.txt' into table dept_ext;

(3)对比外部表和内部表区别
    删除外部表,数据不会有任何改变,只是mysql中的元数据被修改,但是删除内部表(管理表),数据就会被删除。

    总结:hive内部表和外部表的区别
        1)创建表时:创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。
        2)删除表时:在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据
 

 

4、分区表【***】

(1)适用情形

分区表:select * from logs where date = '20171209',执行流程:直接加载对应文件路径下的数据。适用于大数据量,可以通过分区快速定位需要查询的数据,分区表的作用主要是提高了查询检索的效率 。

create table emp_part(  
empno int,  
ename string,
job string,  
mgr int,
hiredate string,  
sal double,  
comm double,  
deptno int
)partitioned by (`datetime` string)
row format delimited  fields terminated by '\t';
 
load data local inpath '/opt/datas/emp.txt' into table emp_part partition(`datetime`='20171209');
load data local inpath '/opt/datas/emp.txt' into table emp_part partition(`datetime`='20171208');
		【在hdfs上形成两个文件夹,emp.txt存储在里面】
		/user/hive/warehouse/hadoop.db/emp_part/datetime=20171208
		/user/hive/warehouse/hadoop.db/emp_part/datetime=20171209
		
		查询结果:
		select * from emp_part where `datetime` = '20171209';

 

5、桶表

(1)使用情形

数据有严重的数据倾斜,分布不均匀,但是相对来说每个桶中的数据量会比较平均。桶于桶之间做join等查询的时候,会有优化。

create table emp_bu(  
empno int,  
ename string,
job string,  
mgr int,
hiredate string,  
sal double,  
comm double,  
deptno int
)CLUSTERED BY(deptno) INTO 4 BUCKETS
row format delimited  fields terminated by '\t';

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值