Sql 在select语句中选择多个架构
正在访问的数据库在雪花上;不确定幕后的存储细节 我现在有一个查询,它从同一数据库下存储在不同模式中的41个数据表创建一个新视图,如下所示:Sql 在select语句中选择多个架构,sql,snowflake-cloud-data-platform,Sql,Snowflake Cloud Data Platform,正在访问的数据库在雪花上;不确定幕后的存储细节 我现在有一个查询,它从同一数据库下存储在不同模式中的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 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
但不确定这将如何工作,以及如何正确地合并结果数据。您完全可以查询可用的表和架构列表。SQL Authority对此有一篇很好的文章: 简言之,查询沿着以下几行结束,以提取表和模式列表:
SELECT '['+SCHEMA_NAME(schema_id)+'].['+name+']'
AS SchemaTable
FROM sys.tables
尽管您必须在where子句中添加数据库名称以指向正确的数据库。不幸的是,在Snowflake中,您还不能动态构造SQL语句。当然,您可以通过使用一种受支持的语言(例如Python、JS)编写脚本,首先查找所有模式,然后构造一个完整的SQL语句来实现您想要实现的目标
希望这能有所帮助。您肯定需要为此标记RDBMS。sql server?神谕mysql?。。。。sql server的答案也是否定的—您不能创建一个视图,该视图将以这种方式自动从动态标识的模式中进行选择。但您可以创建一个使用动态sql的存储过程,也可以创建一个存储过程,根据现有的架构更改和重新创建视图,然后在视图上运行查询。它在snowflake上运行,实际上不确定后端是什么。好吧,我想我标记了正确的一个,但请检查它。很抱歉,我没有使用该特定平台,因此无法提供帮助。感谢您的帮助,我对该平台不太熟悉。sys.tables系统视图中不包含数据库名称!如果要从尚未连接到的特定数据库中选择,请改为从DBNAME.sys.tables中选择。另外,虽然这解决了他如何找到shema的,但并没有解决他如何使用它来修改他的视图或在视图中动态选择表感谢响应,这看起来就像我要做的:将查询包装在一个可以动态生成它的python脚本中