【问题标题】:Drop tables using table names from a SELECT statement, in SQL (Impala)?在 SQL (Impala) 中使用 SELECT 语句中的表名删除表?
【发布时间】:2021-07-17 21:22:31
【问题描述】:

如何使用 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;

这些都不起作用(语法错误)。请问有什么想法吗?

【问题讨论】:

  • 你可以使用python脚本来做。没有直接的方法。

标签: sql impala apache-zeppelin


【解决方案1】:

即使在标准 sql 中,也无法按照您展示的方式进行操作。 在标准 sql 中,通常您可以使用 impala 不支持的动态 sql。 但是,您可以编写一个 impala 脚本并在 impala shell 中运行它,但这样的任务会很复杂,如果这是一次性的事情,我会使用 select 准备 drop 语句并手动运行它:

select concat('DROP TABLE IF EXISTS ',table_name) dropstatements
from tables_to_drop

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2016-09-10
    相关资源
    最近更新 更多