0

今天不小心将一个表声明为非外部表然后drop掉了,导致底层数据被删除。我可以做些什么来防止做这样的事情(除了备份,我们这样做)?

我们几乎只使用外部表,所以如果我们可以完全关闭非外部表功能,或者在声明一个等时需要一个像 FORCE 这样的标志,那就太好了。

注意:我们使用 Hive 0.8 版

4

1 回答 1

1

我认为您的用例没有很好的解决方案。

一个快速而肮脏的解决方案是更改仓库目录的权限,使其无法写入。这将阻止创建内部表,但 HDFS 超级用户除外。您可以授予用户/组权限,以便如果您需要创建内部表,您可以通过切换用户。此解决方案可能会产生意想不到的后果,但只要您完全远离托管表,我就不会想到任何事情。

更困难和更高维护的解决方案是修补 Hive 源以禁止在没有 EXTERNAL 关键字的情况下创建表/使 EXTERNAL 成为默认值/需要 FORCE 关键字来创建托管表/无论您想要的确切行为是什么。

我能想到的最后一个解决方案是非常小心地将所有表设为外部。显然不是一个完美的解决方案,否则你不会问这个问题,但它会是我使用的那个。您最有能力决定其他解决方案的风险和成本是否值得收益。

于 2013-04-19T21:32:42.203 回答