如何解决在 SQL (Impala) 中使用 SELECT 语句中的表名删除表?
如何使用表名的 SELECT 语句的输出删除几个表(例如 1 - 3)?这可能是标准 SQL,但特别是我使用的是通过 Apache Zeppelin 访问的 Apache Impala SQL。
所以我有一个名为 tables_to_drop 的表,其中有一个名为“table_name”的列。这将有一个到几个条目,每个条目都有另一个临时表的名称,该表是其他进程的结果。作为清理工作的一部分,我需要删除名称列在“tables_to_drop”表中的这些临时表。
从概念上讲,我正在考虑一个 SQL 命令,例如:
DROP TABLE (SELECT table_name FROM tables_to_drop);
或:
WITH subquery1 AS (SELECT table_name FROM tables_to_drop) DROP TABLE * FROM subquery1;
这些都不起作用(语法错误)。请问有什么想法吗?
解决方法
即使在标准 sql 中,也不可能按照您展示的方式进行操作。 在标准 sql 中,通常您可以使用 impala 不支持的动态 sql。 但是,您可以编写一个 impala 脚本并在 impala shell 中运行它,但是对于此类任务来说会很复杂,如果这是一次性的事情,我将使用 select 准备 drop 语句并手动运行它:
select concat('DROP TABLE IF EXISTS ',table_name) dropstatements
from tables_to_drop
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。