当我运行drop database
命令时,spark会删除hdfs上的数据库目录及其所有子目录。如何避免这种情况?
答案 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目录中,则您将没有此功能。这是您必须重新设置的内容。