【Hive】hive内部表和外部表的区别

简介: 【4月更文挑战第14天】【Hive】hive内部表和外部表的区别

image.png

Hive 是一个构建在 Hadoop 之上的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供了类 SQL 查询功能。在 Hive 中,有两种主要类型的表:内部表(Managed Table)和外部表(External Table)。它们在数据管理、表的生命周期以及数据的存储位置等方面有一些重要的区别。让我们详细来看一下这些区别,并附上相应的代码片段来加深理解。

1. 内部表(Managed Table)

内部表在 Hive 中是默认的表类型。它们的数据存储在 Hive 所管理的目录中。当删除内部表时,Hive 也会删除关联的数据。这意味着,内部表的生命周期是由 Hive 管理的。

下面是一个内部表的创建示例:

CREATE TABLE internal_table (
    id INT,
    name STRING
) ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

2. 外部表(External Table)

外部表与内部表不同,它们在 Hive 中只维护了表的元数据,而数据本身则存储在外部位置。当删除外部表时,Hive 只会删除元数据,而不会影响数据本身。这使得外部表更适合于与其他工具或系统共享数据。

以下是一个外部表的创建示例:

CREATE EXTERNAL TABLE external_table (
    id INT,
    name STRING
) ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/user/hive/external';

区别总结:

现在让我们更详细地比较这两种类型的表:

数据存储位置:

  • 内部表: 数据存储在 Hive 管理的目录中,Hive 负责管理表的数据。
  • 外部表: 数据存储在外部位置,可以是 HDFS、本地文件系统或其他存储系统。Hive 只负责维护表的元数据,不管理数据。

生命周期管理:

  • 内部表: 当删除内部表时,Hive 会同时删除关联的数据。
  • 外部表: 删除外部表时,只会删除表的元数据,而不会删除数据。

数据共享与互操作性:

  • 内部表: 由于数据由 Hive 管理,与 Hive 集成更紧密,不太适合与其他系统共享数据。
  • 外部表: 适合与其他工具或系统共享数据,因为数据存储在外部位置,并且可以在不影响数据的情况下操作元数据。

示例代码片段说明:

  • 上面的示例代码片段演示了如何创建内部表和外部表,并指定了表的列和数据存储格式。
  • 内部表的存储格式使用了默认的 TEXTFILE,而外部表则可以指定数据存储的具体位置。
  • 注意,在实际环境中,数据存储位置应该是存在的真实路径,以便正确加载数据。

总的来说,内部表和外部表在 Hive 中有着明显的区别,理解这些区别对于在 Hive 中管理和操作数据是非常重要的。

相关文章
|
1月前
|
SQL 存储 关系型数据库
【赵渝强老师】Hive的内部表与外部表
Hive是基于HDFS的数据仓库,支持SQL查询。其数据模型包括内部表、外部表、分区表、临时表和桶表。本文介绍了如何创建和使用内部表和外部表,提供了详细的步骤和示例代码,并附有视频讲解。
|
2月前
|
SQL 存储 分布式计算
Hive和Pig的区别是什么?如何选择?
【10月更文挑战第9天】Hive和Pig的区别是什么?如何选择?
48 0
|
6月前
|
SQL 缓存 关系型数据库
ClickHouse(19)ClickHouse集成Hive表引擎详细解析
Hive引擎允许对HDFS Hive表执行 `SELECT` 查询。目前它支持如下输入格式: -文本:只支持简单的标量列类型,除了 `Binary` - ORC:支持简单的标量列类型,除了`char`; 只支持 `array` 这样的复杂类型 - Parquet:支持所有简单标量列类型;只支持 `array` 这样的复杂类型
227 1
|
7月前
|
SQL Java 数据处理
【Hive】Hive的函数:UDF、UDAF、UDTF的区别?
【4月更文挑战第17天】【Hive】Hive的函数:UDF、UDAF、UDTF的区别?
|
7月前
|
SQL 关系型数据库 MySQL
Hive 表注释乱码解决
Hive元数据在MySQL默认使用`latin1`字符集导致注释乱码。可通过修改MySQL配置文件`/etc/my.cnf`,在`[mysqld]`和末尾添加`character-set-server=utf8`等设置,重启MySQL。然后在Hive数据库中调整表字段、分区字段、索引注释的字符集。注意,这仅对新表生效。测试创建带注释的Hive表,问题解决。
102 0
|
7月前
|
SQL HIVE
Hive表删除数据不支持使用Delete From...
Hive表删除数据不支持使用Delete From...
327 0
|
7月前
|
SQL 存储 分布式计算
Hive【基础 01】核心概念+体系架构+数据类型+内容格式+存储格式+内外部表(部分图片来源于网络)
【4月更文挑战第6天】Hive【基础 01】核心概念+体系架构+数据类型+内容格式+存储格式+内外部表(部分图片来源于网络)
148 1
|
7月前
|
SQL 数据库 HIVE
Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
【4月更文挑战第8天】Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
110 0
|
7月前
|
SQL 分布式计算 数据处理
【Hive】sort by 和 order by 的区别
【4月更文挑战第15天】【Hive】sort by 和 order by 的区别
|
7月前
|
SQL 消息中间件 Kafka
Flink部署问题之hive表没有数据如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
下一篇
DataWorks