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

but5z9lq  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(415)

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

ih99xse1

ih99xse11#

简短回答:

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

长话短说:

从以下网站:https://www.oreilly.com/library/view/programming-hive/9781449326944/ch04.html
默认情况下,配置单元不允许删除包含表的数据库。您可以先删除表,也可以将cascade关键字附加到命令中,这将导致配置单元先删除数据库中的表:
使用restrict关键字而不是cascade相当于默认行为,即在删除数据库之前必须删除现有表。
删除数据库时,其目录也会被删除。
在删除数据库之前,可以将数据复制到其他位置。我知道这很痛苦,但Hive就是这样运作的。
如果您试图在不删除表的hdfs目录的情况下删除一个表,有一个解决方案在这里描述:我可以在hive中将一个表从内部更改为外部吗?
删除外部表会保留数据的hdfs位置。
在将表转换为外部表之后,将数据库drop级联到表不会解决此问题,因为数据库drop会影响数据库所在的整个hdfs目录。您仍然需要将数据复制到其他位置。
如果从头开始创建一个数据库,其中的每个表都是外部的,并且引用数据库hdfs目录之外的一个位置,那么删除此数据库将保留数据。但是,如果您将其设置为数据当前位于数据库hdfs目录中,那么您将没有此功能;这是你必须从头开始设置的东西。

相关问题