【问题标题】:How can I drop database in hive without deleting database directory?如何在不删除数据库目录的情况下将数据库放入配置单元?
【发布时间】:2019-12-11 09:59:12
【问题描述】:

当我运行drop database 命令时,spark 会删除数据库目录及其在 hdfs 上的所有子目录。我怎样才能避免这种情况?

【问题讨论】:

    标签: apache-spark hive hdfs


    【解决方案1】:

    简答:

    除非您将数据库设置为仅包含存在于数据库 HDFS 目录之外的外部表,否则如果不将所有数据复制到 HDFS 中的另一个位置,则无法实现此目的。

    长答案:

    来自以下网站: https://www.oreilly.com/library/view/programming-hive/9781449326944/ch04.html

    默认情况下,Hive 不允许您删除包含表的数据库。您可以先删除表,也可以将 CASCADE 关键字附加到命令中,这将导致 Hive 先删除数据库中的表:

    使用 RESTRICT 关键字代替 CASCADE 等效于默认行为,在删除数据库之前必须先删除现有表。

    当一个数据库被删除时,它的目录也会被删除。

    您可以在删除数据库之前将数据复制到另一个位置。我知道这很痛苦——但这就是 Hive 的运作方式。

    如果您试图只删除一个表而不删除该表的 HDFS 目录,这里描述了一个解决方案:Can I change a table from internal to external in hive?

    删除外部表会保留数据的 HDFS 位置。

    在将数据库 drop 转换为外部后将数据库 drop 级联到表不会解决此问题,因为数据库 drop 会影响数据库所在的整个 HDFS 目录。您仍然需要将数据复制到另一个位置。

    如果您从头开始创建数据库,其中的每个表都是外部的并且引用数据库 HDFS 目录之外的位置,删除此数据库将保留数据。但是,如果您将其设置为数据当前位于数据库 HDFS 目录中,则您将没有此功能;这是你必须从头开始设置的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 2013-03-19
      • 2011-02-01
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      相关资源
      最近更新 更多