📅  最后修改于: 2020-11-30 05:00:08             🧑  作者: Mango
Impala的DROP DATABASE语句用于从Impala中删除数据库。删除数据库之前,建议从数据库中删除所有表。
以下是DROP DATABASE语句的语法。
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT |
CASCADE] [LOCATION hdfs_path];
此处, IF EXISTS是可选子句。如果在存在具有给定名称的数据库时使用此子句,则它将被删除。并且,如果不存在具有给定名称的数据库,则不会执行任何操作。
以下是DROP DATABASE语句的示例。假设您在Impala中有一个名为sample_database的数据库。
并且,如果您使用SHOW DATABASES语句验证数据库列表,则将观察其中的名称。
[quickstart.cloudera:21000] > SHOW DATABASES;
Query: show DATABASES
+-----------------------+
| name |
+-----------------------+
| _impala_builtins |
| default |
| my_db |
| sample_database |
+-----------------------+
Fetched 4 row(s) in 0.11s
现在,您可以使用DROP DATABASE语句删除此数据库,如下所示。
< DROP DATABASE IF EXISTS sample_database;
这将删除指定的数据库,并提供以下输出。
Query: drop DATABASE IF EXISTS sample_database;
您可以使用SHOW DATABASES语句来验证是否删除了给定的数据库。在这里,您可以观察到名为sample_database的数据库已从数据库列表中删除。
[quickstart.cloudera:21000] > SHOW DATABASES;
Query: show DATABASES
+----------------------+
| name |
+----------------------+
| _impala_builtins |
| default |
| my_db |
+----------------------+
Fetched 3 row(s) in 0.10s
[quickstart.cloudera:21000] >
通常,要删除数据库,您需要手动删除数据库中的所有表。如果使用层叠,则Impala会在删除指定数据库之前删除表。
假设在Impala中有一个名为sample的数据库,它包含两个表,即student和test 。如果您尝试直接删除此数据库,则会出现如下所示的错误。
[quickstart.cloudera:21000] > DROP database sample;
Query: drop database sample
ERROR:
ImpalaRuntimeException: Error making 'dropDatabase' RPC to Hive Metastore:
CAUSED BY: InvalidOperationException: Database sample is not empty. One or more
tables exist.
使用cascade ,您可以直接删除该数据库(无需手动删除其内容),如下所示。
[quickstart.cloudera:21000] > DROP database sample cascade;
Query: drop database sample cascade
注意-您无法在Impala中删除“当前数据库”。因此,在删除数据库之前,需要确保将当前上下文设置为要删除数据库之外的数据库。
打开Impala查询编辑器,然后在其中输入DELETE DATABASE语句,然后单击执行按钮,如下所示。假设存在三个数据库,即my_db,my_database和sample_database以及默认数据库。在这里,我们将删除名为my_database的数据库。
执行查询后,将光标轻轻移至下拉菜单的顶部。然后,您将找到一个刷新符号,如下面的屏幕快照所示。如果单击刷新符号,则数据库列表将被刷新,并且最近所做的更改将应用于该列表。
单击编辑器左侧“数据库”标题下的下拉菜单。在那里,您可以看到系统中的数据库列表。在这里,您可以观察到新创建的数据库my_db ,如下所示。
如果仔细观察,您将只能看到一个数据库,即列表中的my_db和默认数据库。