首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任何肯定需要Hive中外部表的生产场景?

任何肯定需要Hive中外部表的生产场景?
EN

Stack Overflow用户
提问于 2022-02-07 12:57:18
回答 1查看 64关注 0票数 1

我知道当我们尝试删除表时,它只删除元数据,而不删除数据。但是,在工业中,如果内部表可能没用,并且只能通过外部表实现,那么在工业中,具体的生产用例是什么呢?

  1. 如果我们认为通过外部表可以确保数据是安全的而不是被任何人删除的,那么在托管表中可以通过设置限制表删除的no_drop选项来实现。

如果我们认为使用相同的底层数据,可以创建许多表,甚至可以通过托管表轻松地实现。

是否有任何特定的行业场景,托管表可能没有用,而我们需要外部表呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-07 13:42:05

no_drop只限制删除表,但在某些情况下,您可能需要删除/创建保存数据的表。

  1. 您可能需要更改表定义并在不删除数据的情况下重新创建它。例如,您有一些由上游进程加载的JSON文件,上游进程又向JSON添加了一个属性,您希望重新创建您的表定义以包含新列并按原样拥有所有数据。或者添加更多从半结构化文件中解析的列(使用RegexSerDe),或者更改表DDL中的regex以改进提取。

  1. 场景2:每天将数据加载到分区文件夹中。一些下游进程只需要最新的分区,您不能将参数传递给它,而其他一些进程则需要整个表。在这种情况下,您可以在上游进程的最新分区dir之上创建分区表,而不是分区的最新表,每次删除和重新创建并更改位置。下游进程可以使用最新的表(事先不知道这是最新的分区,无需查找),整个分区也可以使用。

  1. 您可能希望将数据加载到已配置的托管表位置根dir之外的位置,请参阅https://stackoverflow.com/a/67073849/2700344,并且您的仓库中有一些策略限制将原始数据加载到托管表dir中。在Cloudera发行版上,您不能创建托管表并指定默认位置以外的位置。这就是为什么您可能需要外部表.

使用存储处理程序的

  1. 表只能作为外部的.

创建。

当然,在某些情况下,您可以使用ALTERs而不是DROP/CREATE,但是可以方便地存储DDL表文件,在没有修改的情况下在repo中进行版本化。

也许还有其他一些可能的用例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71018964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档