Inceptor外表介绍与对比内表区别说明

写在前面

Inceptor支持用户创建多种表格形式,其中包括:外部表、分区表、分桶表与临时表。本文将介绍外部表与其应用场景,并将其与内部表从6个方面的区别进行阐述。希望通过阅读该文章,进一步了解外表的特性与实际应用场景,助力您的数据开发。

外表介绍

外表(External table)是一种特殊类型的数据库对象,它定义了一个可读的数据源,但它不是数据库中的表,而是指向一个外部数据源中数据的元数据。外表提供了一种将外部数据文件与数据库相关联的方法,可以在 SQL 查询中像操作普通表一样使用它们。

外表应用场景

外表常用于以下场景中:

  • 数据的导入与导出:可以使用外表将外部数据源中的数据导入到数据库中或者将数据库中的数据导出到外部数据文件中,比如可以将 Excel 或 CSV 格式的数据文件导入到 ArgoDB 数据库中。参考文章:Inceptor 数据导入导出之Insert overwrite
  • 数据库数据的备份和恢复:可以将数据库中的数据备份到外部数据文件中,然后再将其恢复到数据库中。
  • 数据的转换和集成:可以使用外表将多个数据源中的数据进行集成,并通过 SQL 查询来获取需要的数据。需要注意的是,使用外表需要确保外部数据源的数据格式与外表的定义相符,否则会出现查询失败等问题。

与内表的区别说明

内部表和外部表最根本的区别在于,是否由 Quark 管理表的全生命周期。如,Quark 管理内部表的元数据以及实际的表数据,而对于外部表,则只管理它的元数据。以下,将会更具体地阐述内部表和外部表的区别。

1. 建表语句的区别

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

  • 创建外部表示例:
CREATE EXTERNAL TABLE external_t
(trans_id INT, 
acc_num INT, 
trans_time DATE, 
trans_type STRING, 
stock_id STRING, 
price DECIMAL, 
amount INT)
STORED AS TEXTFILE;

image.png

  • 创建内表实示例:
CREATE TABLE t
(trans_id INT, 
acc_num INT, 
trans_time DATE, 
trans_type STRING, 
stock_id STRING, 
price DECIMAL, 
amount INT)
STORED AS TEXTFILE;

image.png

  • 内表外表之间的转换:
--内转外
ALTER TABLE tablename SET TBLPROPERTIES ('EXTERNAL' = 'true');
--外转内
ALTER TABLE tablename SET TBLPROPERTIES ('EXTERNAL' = 'false');

2. 对数据的管理范围不同

  • 内部表

管理内部表的元数据以及表的实际数据。当使用 drop 删除内部表的时候,不但会删除表的元数据,连同其对应的数据(即数据文件),都会被删除。

  • 外部表

只管理外部表的元数据,表的实际数据与元数据只是做了一个映射关系,可以借助元数据信息查询到表的实际数据信息。当使用 drop 删除外部表的时候,只有元数据会被删掉,表的实际数据仍然会存放在 hdfs 对应的路径中。

3. 存储路径的区别

  • 内部表

在创建内部表的时候,一般不需要指定数据的存储路径,在创建的时候,会将数据存储在 hdfs 默认的路径中。一般是:/hive/warehouse/数据库名称/表名。

  • 外部表

在实际使用中,为了让数据存放更安全,外部表一般会搭配 location 来指定数据的存放目录,如果不使用 location ,将会默认在 /hive/warehouse/数据库名称/表名 路径下建立数据目录。

注意:不论是外部表还是内部表,都能使用 location 指定数据的存放路径的。


4. 表结构与分区更改的区别

  • 当内部表的结构与分区发生变化的时候,会自动同步到元数据。
  • 当外部表的结构与分区发生变化的时候,则需要使用 msck repair table table_name 进行修复。

5. 表名称修改

  • 假如内部表和外部表都指向同一个文件,此时若修改内部表名字,对应的location信息和文件名包括路径都会随之发 生变化,会出现外部表则会找不到路径文件;
  • 而假如修改外部表的名字,对应的location和文件路径都不会发生变化,因此对自身和内部表的使用是没有影响的。

由此可以看出:

  • 内部表的location只是一个临时概念,随着表名修改做出相应修改,Quark管理元数据和实际数据;
  • 外部表是个永久概念,当定义完成路径后,只有手动修改其location,才会变化。因为Quark只管理元数据,不能随意修改实际数据所对应的路径等。

6. 总结

对比项 内部表 外部表
管理范围 元数据、实际的表数据 元数据
建表语句 不需要 external 关键字修饰 需要 external 关键字修饰
drop 表后果 删除元数据和实际的表数据 只删除元数据,实际的表数据保留
存储路径 一般在默认位置存储数据 一般搭配 location 指定数据存放位置
表结构和分区更改的区别 自动同步到元数据 需要修复表
表名称修改 location和路径文件一起发生变化 location和路径文件不变

写在最后

外表作为一种特殊类型的数据库对象,提供将外部数据文件与数据库相关联的途径。常用于Inceptor数据的导入导出场景下。与内表共存在管理范围、建表语句、drop结果、存储路径、表结构与分区更改区别和表名称修改共6个方面的区别。通过阅读该文章,希望您对于外表的特性与应用场景都有更加详细地认识。有关于外表的更多知识,欢迎大家在下方评论区留言讨论。 谢谢

文章参考:点击这里

评论
登录后可评论
发布者
icon
扬仔无敌
文章
31
问答
119
关注者
10
banner
关注星环科技
获取最新活动资讯

加入TDH社区版技术交流群

获取更多技术支持 ->

扫描二维码,立即加入