分享

Hive3.x托管表与外部表差异

admin 2021-8-5 15:31:51 发表于 介绍解说 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 2426
问题导读

1.Hive3.x有哪两种类型得表?
2.托管表具有什么属性?
3.外部表具有哪些属性?

Hive 从根本上知道两种不同类型的表:

  • Managed (Internal)
  • External


说明
该文档列出了两者之间的某些差异,但是基本的区别是 Hive 假定它拥有托管表的数据。这意味着数据,其属性和数据布局将并且只能通过 Hive 命令进行更改。数据仍然存在于正常的文件系统中,如果修改数据文件,这样做确实违反了 Hive 的不变性和期望,则可能会看到不确定的错误。

另一个结果是数据被附加到 Hive 实体。因此,每当更改实体(例如删除表)时,数据也会更改(在这种情况下,数据将被删除)。这与传统的 RDBMS 非常相似,在传统的 RDBMS 中,也不会自行 Management 数据文件,而是使用基于 SQL 的访问权限来 Management 数据文件。

对于外部表,Hive 假定它“不”Management 数据。

可以使用描述格式 table_name命令标识托管表或外部表,该命令将根据表类型显示 MANAGED_TABLE 或 EXTERNAL_TABLE。

Statistics可以在内部和外部表及分区上进行 Management 以优化查询。

特性比较
这意味着有很多功能仅适用于两种表类型之一,而不适用于另一种。这是不完整的清单:

ARCHIVE/UNARCHIVE/TRUNCATE/MERGE/CONCATENATE 仅适用于托管表

DROP 删除托管表的数据,而只删除外部表的元数据

ACID /事务处理仅适用于托管表

查询结果缓存仅适用于托管表

外部表仅允许 RELY 约束

某些物化视图功能仅适用于托管表

托管表
托管表存储在hive.metastore.warehouse.dir path 属性下,默认情况下存储在类似于/user/hive/warehouse/databasename.db/tablename/的文件夹路径中。在表创建期间,默认位置可以被location属性覆盖。如果删除了托管表或分区,则将删除与该表或分区关联的数据和元数据。如果未指定 PURGE 选项,则数据将在定义的持续时间内移至废纸 trash 文件夹。

当 Hive 应该 Management 表的生命周期或生成临时表时,请使用托管表。

外部表
外部表描述了外部文件上的元数据/架构。外部表文件可以由 Hive 外部的进程访问和 Management。外部表可以访问存储在诸如 Azure 存储卷(ASV)或远程 HDFS 位置的源中的数据。如果更改了外部表的结构或分区,则可以使用MSCK 维修表 table_name语句刷新元数据信息。

当文件已经存在或位于远程位置时,请使用外部表,并且即使表已删除,文件也应保留。





没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条