Hive内部表和外部表的区别详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive内部表和外部表的区别详解相关的知识,希望对你有一定的参考价值。
参考技术A Hive内部表和外部表的区别详解 - CSDN博客1. 内部表
create tabletest (name string , age string) location '/input/table_data';
注:hive默认创建的是内部表
此时,会在hdfs上新建一个test表的数据存放地
loaddata inpath '/input/data' into table test ;
2. 外部表
create external tableetest (name string , age string);
会在/user/hive/warehouse/新建一个表目录et
loaddata inpath '/input/edata' into tableetest;
把hdfs上/input/edata/下的数据转到/user/hive/warehouse/et下,删除这个外部表后,/user/hive/warehouse/et下的数据不会删除,但是/input/edata/下的数据在上一步load后已经没有了!数据的位置发生了变化!
本质是load一个hdfs上的数据时会转移数据!
内部表&外部表
未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);
区别:
内部表数据由Hive自身管理,外部表数据由HDFS管理;
内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;
删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)
Hive面试题
Hive数据倾斜
key分布不均匀 业务数据本身的特性 SQL语句造成数据倾斜 解决方法 hive设置hive.map.aggr=true和hive.groupby.skewindata=true
还有其他解决方案
Hive内部表和外部表的区别
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。
在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
hive的元数据和存储引擎
hive的元数据存储着通过hive所建的库和表的结构信息, 以及所对应的hdfs上的文件夹
hive可以使用mysql作为存储引擎,也可以使用其他数据库
Hive的特点以及和关系型数据库的区别
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,
可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,
不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
hive导入数据的几种方式
从本地导入: load data local inpath ‘/home/1.txt’ (overwrite)into table student; 从Hdfs导入: load data inpath ‘/user/hive/warehouse/1.txt’ (overwrite)into table student; 查询导入: create table student1 as select * from student;(也可以具体查询某项数据) 查询结果导入:insert (overwrite)into table staff select * from track_log;
hive导出数据的几种方式
用insert overwrite导出方式 导出到本地: insert overwrite local directory ‘/home/robot/1/2’ rom format delimited fields terminated by ‘ ’ select * from staff;(递归创建目录) 导出到HDFS insert overwrite directory ‘/user/hive/1/2’ rom format delimited fields terminated by ‘ ’ select * from staff; Bash shell覆盖追加导出 例如:$ bin/hive -e “select * from staff;” > /home/z/backup.log Sqoop把hive数据导出到外部
分区和分桶
hive优化
Hive中的排序关键字有哪些
sort by ,order by ,cluster by ,distribute by sort by :不是全局排序,其在数据进入reducer前完成排序 order by :会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序).只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。 cluster by : 当distribute by 和sort by的字段相同时,等同于cluster by.可以看做特殊的distribute + sort distribute by :按照指定的字段对数据进行划分输出到不同的reduce中
以上是关于Hive内部表和外部表的区别详解的主要内容,如果未能解决你的问题,请参考以下文章