如何在不删除数据库目录的情况下将数据库拖放到配置单元中?

时间:2019-08-02 19:03:31

标签: apache-spark hive hdfs

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

1 个答案:

答案 0 :(得分:0)

简短答案:

除非将数据库设置为仅包含数据库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位置。

将数据库放置到表之后将它们放置到表上并不能解决此问题,因为数据库放置会影响数据库所在的整个HDFS目录。您仍然需要将数据复制到另一个位置。

如果从头开始创建数据库,该数据库的每个表都是外部的,并且引用数据库HDFS目录外部的位置,则删除该数据库将保留数据。但是,如果您进行了设置,以使数据当前位于数据库HDFS目录中,则您将没有此功能。这是您必须重新设置的内容。