2

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

我现在有一个查询,它从存储在同一数据库下的不同模式中的 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

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

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

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

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

4

2 回答 2

1

不幸的是,在 Snowflake 中,您还不能动态地构造 SQL 语句。您当然可以通过使用一种受支持的语言(例如 Python、JS)的脚本来实现您想要实现的目标,方法是首先找到所有模式,然后构建完整的 SQL 语句。

希望这可以帮助。

于 2016-09-10T16:31:34.530 回答
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 子句以指向正确的数据库。

于 2016-09-09T15:29:26.860 回答