这里写目录标题
hive:外部表和内部表
--------------------------------------------DDL 建表语句:内部表和外部表---------------------------------------------------
/*
面试题:内部表和外部表的区别是什么?
1:建表格式不同
内部表:直接创建即可,默认创建不指定就是内部表 (管理表)
外部表:建表的时候需要增加关键字 external
例如: create table 表名; 内部表
create 【external】 table 表名; 外部表
2:权限不同,是否会删除源数据
内部表:也称之为管理表,删除内部的时候,不仅会删除元数据(Hive中查不到),还会删除源数据(HDFS中查不到)
外部表:只会删除元数据(Hive中查不到了),不会删除源数据(HDFS中还在)
细节:
1:如果某一个文件想持久存储(除了hive框架要是用,可能spark也要用),建Hive的外表表
2:如果某一个HDFS随着Hive表的删除而删除,就是用内部
*/
use day05;
show TABLES;
-- 1:建表 内部表?为什么? 没有指定external关键字
CREATE table t_archer_innder(
id int COMMENT 'ID',
name string COMMENT '英雄',
hp_max int COMMENT '最大血量',
mp_max int COMMENT '最大法力值',
attack_max int COMMENT '最大物攻',
defense_max int COMMENT '最大物防',
atteck_range string COMMENT '攻击范围',
role_main string COMMENT '主要定位',
role_assist string COMMENT '辅助定位'
)COMMENT '射手表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
-- 以\t方式来分割字段
-- 2:查询表数据
SELECT * from t_archer_innder;
-- 3:查看表的字段 (发现中文注释是乱码)
desc t_archer_innder;
desc formatted t_archer_innder; -- 查看表的详细信息 Table Type: MANAGED_TABLE
--4:上传数据文件 web端,找到表的路径 上传
-- /user/hive/warehouse/day05.db/t_archer_innder
-- 5:删除内部表
DROP table t_archer_innder;
-- 6:验证:
-- 查看9870 /user/hive/warehouse/day05/t_archer_innder下的源文件
-- 查看mysql数据库hive3数据库下的TBLS数据表中的元数据信息
show tables;
-- 验证外部表
-- 1: 建表的时候加上关键字EXTERNAL ,即创建外部表
CREATE EXTERNAL table t_archer_outer(
id int COMMENT 'ID',
name string COMMENT '英雄',
hp_max int COMMENT '最大血量',
mp_max int COMMENT '最大法力值',
attack_max int COMMENT '最大物攻',
defense_max int COMMENT '最大物防',
atteck_range string COMMENT '攻击范围',
role_main string COMMENT '主要定位',
role_assist string COMMENT '辅助定位'
)COMMENT '射手表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
-- 2:上传文件
讲义&软件包&测试数据\02_测试数据\测试数据\hero\archer.txt
-- 3:查找表
SELECT * FROM t_archer_outer;
-- 4:查看表详情信息 table type :EXTERNAL_TABLE
desc FORMATTED t_archer_outer;
-- 5:删除外部表
DROP TABLE t_archer_outer; -- 只删除元数据,不会删除源数据
-- 6:验证:
-- 查看9870 /user/hive/warehouse/day05/t_archer_outer下的文件
-- 查看mysql数据库hive3数据库下的TBLS数据表中的元数据信息
-- 7:思考: 如果我把外部表删了,又重新创建外部,请问:里面之前的数据还在吗 ?
-- 答案:如果表结构、切割方式、表的存储、表名等信息不发生改变,则创建出来该表后,默认就有之前的数据
举例1
内部表:手机里的自带相册应用
想象一下,你的手机里有一个自带的相册应用,这就好比是Hive内部表。
- 建表格式:
- 手机出厂时,这个相册应用就已经安装好在手机系统里了,不需要你额外去做什么特别的设置或者标注来让它存在,就如同在Hive里创建内部表,直接创建就行,默认情况下创建出来的就是内部表,它是手机系统自带的、属于手机内部管理的一部分功能。
- 权限及数据处理:
- 假如有一天,你觉得手机相册里某一组照片(比如某次旅行拍的照片)你不再想要了,你在手机相册应用里选择删除这组照片。当你执行删除操作后,不仅手机相册应用里关于这组照片的缩略图、拍摄时间、地点等记录信息(相当于Hive中的元数据,在相册应用里就看不到这组照片的相关信息了)会被删除,而且手机存储里实际存放这组照片的文件(相当于HDFS中的源数据,在手机存储里原本存放这组照片的位置也找不到它们了)也会被删除掉。也就是说,一旦从这个手机自带相册(内部表)里删除了照片,这些照片在整个手机的存储和相册管理体系(Hive及相关存储环境)里就完全消失了,好像从来没存在过一样。
外部表:云盘里存储照片的文件夹
现在再想象一下,你还在某个云盘服务上注册了账号,并在云盘里创建了一个专门用来存储照片的文件夹,这就类似于Hive外部表。
- 建表格式:
- 当你在云盘里创建这个文件夹时,你是特意去云盘的操作界面进行创建的,而且你知道这个文件夹是独立于手机自带相册之外存在的,你可能还会给它起个特别的名字或者设置一些特定的权限(就如同在创建表时要加上external关键字表明是外部表,让它区别于手机自带相册这种自带的、默认的存储方式)。
- 权限及数据处理:
- 假如有一天,你在手机相册应用里不想再显示这个云盘文件夹里照片的相关信息了(相当于在Hive中删除外部表的元数据),你只是在手机相册应用里把和这个云盘文件夹相关的连接或者显示设置去掉了(只删除了Hive中的元数据),但是这个云盘里的照片文件夹本身依然好好地存在于云盘服务器上(HDFS中的源数据不会被删除),里面的照片依然可以通过云盘的网页端或者其他设备登录云盘去访问、查看和使用。而且,如果之后你又想在手机相册应用里重新显示这个云盘文件夹的相关信息(重新创建同名同结构等的外部表),只要这个云盘文件夹本身的存储结构、照片的存储格式、文件夹的名字等(相当于表结构、切割方式、表的存储、表名等信息不发生改变)都没有变化,那么当你再次在手机相册应用里设置好相关连接和显示设置后,里面原来存放的照片(相当于之前的数据)还是可以正常显示和使用,就如同在Hive里重新创建外部表后能继续使用之前的数据一样。
这样通过手机自带相册和云盘文件夹的例子,是不是对Hive内部表与外部表的区别更加直观形象地理解了呢?
举例2
好的,以下是一组全新的、更加直观形象的例子来解释Hive内部表与外部表的区别,希望能让你彻底明白哦。
内部表:手机自带的短信收件箱
想象一下,你的手机自带了一个短信收件箱,这就好比是Hive内部表。
-
建表格式:
- 手机出厂时,短信收件箱就已经内置在手机系统里了,它是手机整体功能的一部分,不需要你额外去做什么特别的设置或者安装步骤来让它存在,就如同在Hive里创建内部表,直接创建就行,默认创建出来的就是内部表,是手机系统内部管理短信存储的常规方式。
-
权限及数据处理:
- 假如有一天,你决定删除收件箱里的某几条短信,当你在手机上操作删除这些短信后,不仅手机短信应用里关于这些短信的发送者、接收时间、内容预览等记录信息(相当于Hive中的元数据,在短信应用里就看不到这些短信相关的信息了)会被删除,而且手机存储里实际存放这些短信内容的文件(相当于HDFS中的源数据,在手机存储里原本存放这些短信内容的位置也找不到它们了)也会被删除掉。也就是说,一旦从这个手机自带的短信收件箱(内部表)里删除了短信,这些短信在整个手机的短信管理体系(Hive及相关存储环境)里就完全消失了,好像从来没在这个收件箱里放过一样。
外部表:电子邮箱收件箱
现在想象一下,你还注册了一个电子邮箱,这个电子邮箱的收件箱就类似于Hive外部表。
-
建表格式:
- 当你注册电子邮箱时,你是特意去邮箱服务提供商的网站或者应用上进行注册操作的,而且你知道这个邮箱收件箱是独立于手机自带短信收件箱之外存在的,你可能还会设置一些特定的邮箱账号、密码等(就如同在创建表时要加上external关键字表明是外部表,让它区别于手机自带短信收件箱这种自带的、默认的存储方式)。
-
权限及数据处理:
- 假如有一天,你在手机上不想再显示这个电子邮箱收件箱的信息了(相当于在Hive中删除外部表的元数据),你只是在手机上把和这个电子邮箱相关的应用或者设置去掉了(只删除了Hive中的元数据),但是这个电子邮箱本身依然好好地存在于邮箱服务提供商的服务器上(HDFS中的源数据不会被删除),里面的邮件依然可以通过电脑端或者其他设备登录邮箱去访问、查看和使用。而且,如果之后你又想在手机上重新显示这个电子邮箱收件箱的信息(重新创建同名同结构等的外部表),只要这个电子邮箱本身的设置、邮件的存储格式、收件箱的名字等(相当于表结构、切割方式、表的存储、表名等信息不发生改变)都没有变化,那么当再次在手机上设置好相关连接和显示设置后,里面原来存放的邮件(相当于之前的数据)还是可以正常显示和使用,就如同在Hive里重新创建外部表后能继续使用之前的数据一样。
通过手机自带的短信收件箱和电子邮箱收件箱的例子,你现在对Hive内部表与外部表的区别是不是有更直观形象的理解了呢?
标签:COMMENT,内部,删除,外部,收件箱,--,hive,Hive,手机 From: https://blog.csdn.net/weixin_74002941/article/details/143493532