在select语句中选择多个模式

时间:2016-09-09 15:26:53

标签: sql snowflake-datawarehouse

正在访问的数据库是在Snowflake上;不确定幕后的存储细节。

我现在有一个查询,它在同一个数据库下的41个数据表中创建一个新视图,存储在不同的模式中,如下所示:

CREATE VIEW all_data AS
SELECT * FROM db.schema1.data UNION ALL
SELECT * FROM db.schema2.data UNION ALL
SELECT * FROM db.schema3.data

此查询每天运行。我的问题是我每隔几天就会添加一个新的数据表,我必须手动编辑查询以包含这些新表,因为它们存储在不同的模式下(并且模式的命名方案不是't&t; t由于我无法控制的原因,也是一致的。有没有办法可以用子查询选择数据库中的所有模式,这样可以让我每天运行查询而不需要在添加新模式+表时进行手动更新?

我希望结果查询的结构有点像

CREATE VIEW all_data as 
SELECT * FROM [SELECT schemas from db].data

但不确定这是如何工作的,以及如何正确地合并结果数据。

2 个答案:

答案 0 :(得分:1)

不幸的是,在Snowflake中,您无法动态构建SQL语句(尚未)。您当然可以通过一种支持的语言(例如Python,JS)中的脚本来完成您想要实现的目标,首先查找所有模式,然后构建完整的SQL语句。

希望这有帮助。

答案 1 :(得分:0)

您绝对可以查询可用的表和架构列表。 SQL Authority有一篇很好的文章: http://blog.sqlauthority.com/2009/06/17/sql-server-list-schema-name-and-table-name-for-database/

简而言之,查询最终会沿着这些行拉出表和模式列表:

SELECT '['+SCHEMA_NAME(schema_id)+'].['+name+']'
AS SchemaTable
FROM sys.tables

虽然您必须在where子句中添加数据库名称以指向正确的数据库。