hive内部表和外部表

 

内部表创建方法:

create table student(
 id int,
 name string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';

使用 desc formatted student; 查看表的描述信息,Table Type = MANAGED_TABLE ,说明该表为内部表

在准备hdfs的/opt/test 路径下student.txt 文件,内容如下

stendent.txt 文件内容

1,zhangsan
2,lisi
3,wangwu

接下来可以使用 loaddata 将本地文件或者hdfs中的文件导入到student表, 

load data inpath '/opt/test/student.txt' into table student;

查询结果如下:

 

创建外部表:

首先在hdfs路径/opt/studnet路径下准备俩个文件student_1.txtstudent_2.txt,如下:

#student_1.txt文件内容
1,zhangsan
2,lisi
3,wangwu


#student_2.txt文件内容
4,lucy
5,lili

创建外部表student_1

create external table student_1(
  id int,
  name string
)
ROW FORMAT DELIMITED
 FIELDS TERMINATED BY ','
location '/opt/student';

desc formatted student_1(table type 为external_table)

select * from student_1 结果如下(/opt/student路径下的student_1.txt 和 student_2.txt 的文件数据被导入到student_1表中)

内部表和外部表的不同点:

1.内部表drop table会删除hdfs中的文件。外部表drop table 不会删除hdfs中的文件。

2.内部表load data 会移动将hdfs中的文件移动到hive默认的hdfs路径即:/user/hive/warehouse

  外部表不会移动hdfs中的文件。

使用场景:

在hdfs中先有文件而后创建表,使用外部表。

先创建表而后在HDFS中有文件,使用内部表。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<think>嗯,用户想了解Hive内部表外部表区别。我需要先回顾一下Hive的基本概念。内部表外部表在数据存储管理上有不同的行为。记得内部表的数据由Hive管理,删除表时会同时删除数据,而外部表只管理元数据,删除表不会影响数据文件。这可能用户提到的引用内容有关,特别是引用[2]提到的外部表在删除后文件仍然保留。 接下来需要整理两者的主要区别,比如存储位置、删除行为、用途场景等。用户提供的引用[1]提到HiveParquet在模式处理上的差异,但可能当前问题关联不大,不过引用[2]直接相关,应该引用。引用[3]关于TABLESAMPLE可能暂时用不上,但先留着。 需要确保回答结构清晰,按照用户的要求分点说明。同时,用户要求生成相关问题,所以得考虑常见疑问,比如使用场景、如何选择、数据恢复等。还要注意使用中文,LaTeX格式正确,但这个问题可能涉及较少数学公式,但如果有表达式也要正确处理。 检查是否有遗漏点,比如创建语法的区别,是否影响权限或其他Hive操作。可能还要提到EXTERNAL关键字的使用,以及是否可以通过ALTER TABLE转换类型。另外,内部表适用于临时数据,而外部表适合共享数据,比如与其他工具如Spark共用,避免误删数据。 最后,确保引用正确,引用[2]已经覆盖了外部表的关键点,其他引用可能不需要。总结时强调用户根据数据生命周期管理需求来选择表类型。</think>### Hive内部表外部表区别 Hive内部表(Internal Table)外部表(External Table)在数据存储、生命周期管理等方面有以下核心差异: --- #### 1. **数据存储位置与控制权** - **内部表**:数据文件默认存储在Hive的仓库目录(如`/user/hive/warehouse`),由Hive**全权管理**。创建语法无需指定`EXTERNAL`关键字。 - **外部表**:数据文件可存放在**任意HDFS路径**,由用户或外部系统管理。创建时需显式声明`EXTERNAL`关键字: ```sql CREATE EXTERNAL TABLE table_name (...) LOCATION '/path/to/data'; ``` --- #### 2. **删除表时的行为** - **内部表**:执行`DROP TABLE`时,**元数据(表结构)底层数据文件会被同时删除**。 - **外部表**:执行`DROP TABLE`时,**仅删除元数据,数据文件保留**。这适用于与其他系统(如Spark)共享数据的场景[^2]。 --- #### 3. **应用场景** - **内部表**:适合临时数据、中间表或生命周期完全由Hive控制的场景。 - **外部表**:适合已存在的数据(如日志文件)、需要多引擎共享的数据,或要求数据持久化的场景[^2]。 --- #### 4. **数据恢复特性** - 若误删**内部表**,数据通常无法直接恢复(需依赖备份); - **外部表**的数据始终独立存在,重建表后即可重新关联。 --- ### 选择建议 - 若需Hive**完全控制数据**,选内部表; - 若需**跨平台共享数据**或**避免误删风险**,选外部表。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值