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

被折叠的 条评论
为什么被折叠?



