我正在雪花仓库中处理 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 来遍历每个表并将它们连接到一个表中。
答案 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 中的某些特定内容,而您的意思似乎是联合