用于更新和插入的 Hive 托管与外部表

Posted

技术标签:

【中文标题】用于更新和插入的 Hive 托管与外部表【英文标题】:Hive Managed vs External table for Updates and Inserts 【发布时间】:2020-09-09 02:46:04 【问题描述】:

hive 外部表和托管表的优缺点是什么?

我们想在 Hive 表中进行更新和插入,但想知道对这些表采取哪种方法(托管表或创建一种解决方法,在手动文件更新后刷新外部表),尤其是在随着时间的推移添加许多文件之后.. 一种方法或者另一个变得太慢(例如,太多文件/太多更新无法通过 Metastore 跟踪,因此主节点变慢?)?

谢谢。

【问题讨论】:

【参考方案1】:

在 Hive 上执行 DML 有一些限制。请阅读文档链接以获取更多详细信息 - https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions。始终建议不要在 Hive 托管表上使用 DML,特别是如果数据量很大或者表的大小随着时间的推移而增长,这些操作会变得太慢。虽然,如果在分区/桶而不是完整表上完成这些操作会快得多。尽管如此,最好处理文件中的编辑并通过外部表进行完全刷新,并且仅在托管表上使用 DML 作为最后的手段。

【讨论】:

以上是关于用于更新和插入的 Hive 托管与外部表的主要内容,如果未能解决你的问题,请参考以下文章

Hive 外部表位置与加载路径

Hive内部表、外部表、分区表、桶表概述

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

Hive- 表

hive深入使用

hive 内部表和外部表的区别