SQL / 雪花 - 选择表是否存在

时间:2021-05-26 15:42:05

标签: sql jinja2 snowflake-cloud-data-platform dbt

我正在雪花仓库中处理 N 个表,其中 N 会随着时间的推移任意增大。

我正在根据表列表动态创建 SQL 语句,SQL 脚本如下所示:

SELECT * FROM table_1
UNION ALL
SELECT * FROM table_2
UNION ALL
...
SELECT * FROM table_n;

问题是表格列表本身是动态设置的,有些表格可能不存在。如果表不存在,我只想在我的选择语句中忽略它。所以像:

SELECT * FROM table_1 IF EXISTS table_1
UNION ALL
SELECT * FROM table_2 IF EXISTS table_2
UNION ALL
...
SELECT * FROM table_n IF EXISTS table_n;

有谁知道这种行为是否可以在 SQL/Snowflake 中实现?

作为记录,我使用模板系统 dbt 来遍历每个表并将它们连接到一个表中。

1 个答案:

答案 0 :(得分:1)

要检查数据库中是否存在表,您需要对 information_schema.tables 使用 SELECT 语句。

我认为这样的事情应该可以在 dbt 中工作,但我没有对其进行测试。

{% for table_name in run_query("select table_name from information_schema.tables where table_name in ('my', 'list', 'of', 'n', 'tables')").rows %}
    {% if not loop.first %}
        UNION ALL
    {% endif %}
        SELECT * FROM table_name
    {% endif -%}
{% endfor %}

既然你说你是 SQL 的初学者,这似乎是一条通往痛苦的道路。您需要保证最后一个表中的所有表都具有相同的模式。结果集可能非常大,具体取决于表中的行数。您还说“加入”,这意味着 SQL 中的某些特定内容,而您的意思似乎是联合