2023.11.11 hive中的内外部表的区别

一.内部表操作

sql 复制代码
------------------------------1内部----------------------------
--建库
create database hive2;
--用库
use hive2;
--删表
drop table t1;
--建表
create table if not exists t1(
    id int,
    name string,
    gender string
);
--复制内部表
--复制表结构:CREATE TABLE 表名 like 另一个表名
create table t1_like like t1;
desc t1_like;
--复制表结构:CREATE TABLE 表名 as select 语句
create table t1_like1 as select * from t1;
desc t1_like1;
--清空表内部数据 truncate table 内部表名
truncate table t1_like1;

二.外部表操作

sql 复制代码
-----------------------------------2外部表-------------------------------
--创建外部表1:
create external table out_1(
    id int,
    name string
);
--插入数据
insert into out_1 values (1,'白');
--*外部表不能使用as select的方式来复制表
--删除表,等于删了个文件夹,文件还在
drop table out_1;
truncate table out_1 ; -- 外部表不能使用truncate来清空

切换内外部表操作

bash 复制代码
修改表属性: alter table 表名 set tblproperties ('属性名'='属性值');     注意: 经常用于内外部表切换
内外部表类型切换:  外部表属性: 'EXTERNAL'='TRUE'   内部表属性: 'EXTERNAL'='FALSE'

三.内部表和外部表的区别

主要体现在load与drop(是否同时删除元数据与数据)的操作上:

0. 建表语句的区别:

外部表的建表语句需要被 external 修饰,但是内部表是不需要的。

create external table if not exists table_name(字段名 字段类型);

内部表又叫管理表,托管表,他有绝对控制权

外部表又叫关联表,非托管表,他没有绝对控制权

1.创建表:

Hive创建内部表时,会将数据移动到数据仓库指向的路径,hive管理数据的生命周期;

内部表可以使用create table 表名 as select语句方式建表

Hive创建外部表时,仅记录 数据所在的路径,不对数据的位置做任何改变。

外部表无法使用as select语句

2.删除表:

Hive删除内部表时,内部表的元数据和数据 会**一起被删除,**同时对于一些hive操作不适应于外部表,比如单个查询语句创建表并向表中插入数据。

truncate命令可以清空内部表中的业务数据


删除外部表只会删除元数据,而不会删除实际数据。 在Hive外部仍然可以访问实际数据。

删除外部表: drop table 外部表名;

注意: 删除外部表效果是mysql中元数据被删除,但是存储在hdfs中的业务数据本身被保留

复制表: 方式1: like方式复制表结构 注意: as方式外表不可以使用

这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。创建外部表时,甚至不需要知道外部数据是否存在,可以把创建数据推迟到创建表之后才进行。

truncate命令不能用于外部表

3.load加载数据

内部表:会把数据移动到自己指定的路径下

外部表:不会把数据移动到自己的数据仓库目录下,也因此证明外部表的数据不是由自己管理的。

4.修改表名

复制代码
-- 修改表名: alter table 旧表名 rename to 新表名

--内部表在改名后,hdfs里的表目录名也会更改
--外部表只会修改元数据表名,hdfs中表目录名不会改变

ACID ,是指数据库管理系统DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。

相关推荐
F_D_Z5 小时前
【SQL】指定日期的产品价格
数据库·sql·mysql
IT学长编程5 小时前
计算机毕业设计 基于大数据技术的医疗数据分析与研究 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
大数据·hadoop·机器学习·数据分析·毕业设计·毕业论文·医疗数据分析
麦聪聊数据6 小时前
如何使用 QuickAPI 快速连接 MySQL 数据库并发布 RESTful API
数据库·sql·mysql·restful·数据服务
IT学长编程8 小时前
计算机毕业设计 基于深度学习的酒店评论文本情感分析研究 Python毕业设计项目 Hadoop毕业设计选题 机器学习选题【附源码+文档报告+安装调试】
hadoop·python·深度学习·机器学习·数据分析·毕业设计·酒店评论文本情感分析
小朋友,你是否有很多问号?8 小时前
Mac安装hadoop
hadoop·macos
数巨小码人11 小时前
Oracle SQL调优技巧实战指南
数据库·sql·oracle
奋斗的蛋黄12 小时前
HDFS与Yarn深入剖析
大数据·运维·hadoop
无名客013 小时前
SQL语句执行时间太慢,有什么优化措施?以及衍生的相关问题
java·数据库·sql·sql语句优化
咋吃都不胖lyh13 小时前
SQL数据分析原代码--创建表与简单查询
java·数据库·sql
武昌库里写JAVA14 小时前
Java设计模式中的几种常用设计模式
vue.js·spring boot·sql·layui·课程设计