Hive 托管与外部表的可维护性

Posted

技术标签:

【中文标题】Hive 托管与外部表的可维护性【英文标题】:Hive Managed vs External tables maintainability 【发布时间】:2019-11-03 18:25:05 【问题描述】:

在维护加载、管理或外部数据方面,哪一个更好(性能方面和长期操作)?

并且通过维护,我的意思是这些表每天都会频繁地进行以下操作;

    大多数情况下选择使用分区。但有些情况下不使用。 删除特定记录,而不是所有分区(例如在某些列中发现问题并想删除并重新插入)。 - 我不确定这是否支持普通表,除非使用事务。 最重要的,需要经常合并文件..可能每天两次合并小文件以获得更少的映射器。我知道连接可用于托管和插入覆盖外部..哪个成本更低?

【问题讨论】:

【参考方案1】:

这取决于您的用例。跨多个应用程序使用时推荐使用外部表,例如与hive pig或其他应用程序一起用于处理数据在这种场景中主要推荐使用外部表。当您主要读取数据时使用它们。

在托管表的情况下,hive 可以完全控制数据。虽然您可以将任何外部表转换为托管表,反之亦然

alter table table_name SET TBLPROPERTIES('EXTERNAL'='TRUE');

在您的情况下,您经常对数据进行修改,因此配置单元最好完全控制数据。在这种情况下,建议使用托管表。

除了那个托管表比外部表更安全,因为任何人都可以访问外部表。在托管表中,您可以实现 Hive 级别的安全性,从而提供更好的控制,但在外部情况下,您必须实现 HDFS 级别的安全性。

您可以参考以下链接,这些链接可以为您提供一些注意事项

External Vs Managed tables comparison

【讨论】:

以上是关于Hive 托管与外部表的可维护性的主要内容,如果未能解决你的问题,请参考以下文章

Hive 外部表位置与加载路径

增量更新 Hive 表数据

Hive学习之三 《Hive的表的详解和应用案例详解》

外部覆盖后 Spark 和 Hive 表架构不同步

hive外部表的建立与数据匹配

hive 内部表和外部表的区别