Hive基础(5)---内部表 外部表 临时表

本文介绍了Hive中的三种表类型:外部表、内部表及临时表。详细解释了每种表的特点与用法,包括创建方式、数据存储位置等,并说明了从Hive1.1开始,临时表的数据存储选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1.外部表

关键字:EXTERNAL

外部表创建时需要指定LOCATION

删除外部表时,数据不被删除

CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User',
     country STRING COMMENT 'country of origination')
 COMMENT 'This is the staging page view table'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
 STORED AS TEXTFILE
 LOCATION '<hdfs_location>';

 

2.内部表

 

3.临时表

Hive 0.14.0及以上

表只对当前session有效,session退出后,表自动删除。

语法:

CREATE TEMPORARY TABLE ...

注意点:

1、如果创建的临时表表名已存在,那么当前session引用到该表名时实际用的是临时表,只有drop或rename临时表名才能使用原始表

2、临时表限制:不支持分区字段和创建索引

 

Hive1.1开始临时表可以存储在内存或SSD,使用hive.exec.temporary.table.storage参数进行配置,该参数有三种取值:memory、ssd、default。

转载于:https://www.cnblogs.com/Dhouse/p/5845591.html

<think>嗯,用户想了解Hive外部表内部表。我应该先回忆一下Hive的基本概念。Hive是基于Hadoop的数据仓库工具,用来处理结构化数据,使用HQL查询。内部表外部表是其中两种表类型,关键区别在于数据生命周期管理。 首先,内部表,也叫管理表。当创建内部表时,Hive会管理数据存储的位置,通常是HDFS的默认路径,比如/user/hive/warehouse。删除内部表时,元数据和实际数据都会被删除。这适合临时数据,用户不需要关心数据残留的问题。 然后是外部表。创建时需要指定外部关键字,并且要定义数据的位置。这时候Hive只管理元数据,实际数据存储在用户指定的路径。删除外部表时,只删除元数据,数据仍然保留在原来的位置。这对需要多个工具共享数据的情况非常有用,比如同时用Hive和Spark处理同一份数据,避免误删。 接下来要考虑用户可能的实际应用场景。比如,用户可能需要外部表来避免误删生产数据,或者内部表用于中间结果的临时存储。还要注意语法差异,创建外部表需要用EXTERNAL关键字和LOCATION指定路径。 另外,需要提醒用户注意权限问题,外部表的数据位置可能需要适当的HDFS权限设置。还有数据恢复的可能性,内部表一旦删除,数据就没了,而外部表的数据还在,除非手动删除。 可能用户在使用中遇到的问题,比如误删内部表导致数据丢失,或者外部表路径配置错误导致数据无法访问。需要强调根据使用场景选择合适的表类型,确保数据安全和高效管理。 总结一下,回答的结构应该先定义两种表,然后对比它们的特点,包括数据管理、存储位置、删除行为、应用场景等。最后给出使用建议,帮助用户根据需求选择。要确保语言清晰,步骤分明,避免技术术语过于复杂,让用户容易理解。</think>Hive中的外部表(External Table)和内部表(Internal Table,又称管理表)是两种数据管理方式,主要区别在于**数据生命周期控制权**和**存储位置管理**。以下是详细对比与分析: --- ### 一、内部表(Managed Table) #### 1. 特点 - **数据管理权**:Hive完全控制数据生命周期。 - **存储位置**:默认存储在Hive的仓库目录(如`/user/hive/warehouse`),路径由Hive自动分配。 - **删除行为**:删除表时,**元数据(表结构)和实际数据文件**会同时被删除。 #### 2. 适用场景 - 临时数据或中间结果。 - 需要Hive完全管理数据时(如测试环境)。 #### 3. 创建语法 ```sql CREATE TABLE managed_table ( id INT, name STRING ); ``` --- ### 二、外部表(External Table) #### 1. 特点 - **数据管理权**:用户或外部系统控制数据生命周期。 - **存储位置**:需手动指定路径(如`LOCATION '/user/data/logs'`)。 - **删除行为**:删除表时,**仅删除元数据**,实际数据文件保留。 #### 2. 适用场景 - 多系统共享数据(如Hive与Spark共用同一份数据)。 - 防止误删生产数据(如日志文件、原始数据备份)。 #### 3. 创建语法 ```sql CREATE EXTERNAL TABLE external_table ( id INT, name STRING ) LOCATION '/user/data/external_table'; ``` --- ### 三、核心差异对比 | 特性 | 内部表 | 外部表 | |---------------------|--------------------------|---------------------------| | **数据存储位置** | Hive默认路径 | 用户自定义路径 | | **数据删除行为** | 删除表时同时删除数据 | 删除表时保留数据 | | **数据控制权** | Hive管理 | 用户管理 | | **应用场景** | 临时数据、测试环境 | 生产数据、多系统共享 | --- ### 四、使用建议 1. **优先选择外部表**: 若数据需要长期保留或被其他工具访问,外部表更安全。 2. **明确存储路径**: 创建外部表时,务必通过`LOCATION`指定可读写的HDFS路径。 3. **数据恢复**: 误删外部表后,可通过重建表(指定原路径)恢复数据;内部表数据无法恢复。 --- ### 五、示例验证 1. **验证删除行为**: ```sql -- 删除内部表(数据消失) DROP TABLE managed_table; -- 删除外部表(数据保留) DROP TABLE external_table; ``` 2. **迁移表类型**: ```sql --内部表转为外部表 ALTER TABLE managed_table SET TBLPROPERTIES('EXTERNAL'='TRUE'); ``` --- 通过合理选择外部表内部表,可以优化数据管理流程,避免因误操作导致数据丢失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值