如何通过查询从Snowflake中创建特定视图的表
Posted
技术标签:
【中文标题】如何通过查询从Snowflake中创建特定视图的表【英文标题】:How to get from which table a particular view is created in Snowflake through query 【发布时间】:2021-10-11 12:36:36 【问题描述】:我是雪花的新手。我正在构建一个应用程序,我需要在其中显示创建特定视图的表信息(名称和属性)。
示例: Snowflake views with its source tables
到目前为止,我已经尝试了来自以下站点的查询,但它没有给出特定视图的源表。
https://dataedo.com/kb/query/snowflake/list-views-with-their-scripts
那么,是否有一个查询可以让我获得特定视图的源表(涉及属性)。
【问题讨论】:
您可能需要解析 view_definition(information_schema.views) 以获取表名并使用 get_ddl 检索表定义。详情:docs.snowflake.com/en/sql-reference/functions/… 谢谢@FKayani,我也想过,但这将是一个复杂的过程,因为创建视图语句可能更复杂:) 您尝试过新的访问历史视图吗? docs.snowflake.com/en/user-guide/access-history.html 【参考方案1】:可以使用GET_OBJECT_REFERENCES提取视图依赖项:
SELECT REFERENCED_DATABASE_NAME,
REFERENCED_SCHEMA_NAME,
REFERENCED_OBJECT_NAME,
REFERENCED_OBJECT_TYPE,
*
FROM TABLE(get_object_references(database_name=>'<db_name>',
schema_name=>'<schema_name>',
object_name=>'<view_name>'));
可以使用INFORMATION_SCHEMA.COLUMNS查询列列表。
【讨论】:
这太棒了,谢谢@LukaszSzozda,还有一种方法可以获取从表中创建特定视图所涉及的属性吗?例如:create view v1 (pre_tax_profit, taxes, after_tax_profit) as select revenue - cost, (revenue - cost) * tax_rate, (revenue - cost) * (1.0 - tax_rate) from table1;
。在此示例中,收入、成本、税费率参与创建视图。
@KishorKumar 可以从ACCESS HISTORY 推断出该信息。 "SELECT * FROM view_name" 然后检查访问历史。【参考方案2】:
您可以使用以下示例查询来提取列级元数据...
select
-- refr_tab.referenced_database_name,refr_tab.referenced_schema_name, refr_tab.referenced_schema_name,referenced_object_name
ref_cols.*
from
table(
get_object_references(
database_name => 'ex1_gor_y',
schema_name => 'public',
object_name => 'y_view_f'
)
) refr_tab,
information_schema.columns ref_cols
where
refr_tab.referenced_object_type = 'TABLE'
and refr_tab.referenced_schema_name = ref_cols.table_schema
and refr_tab.referenced_object_name = ref_cols.table_name
and ref_cols.table_name = 'Y_TAB_A';
【讨论】:
感谢您的输入,当我运行此查询时,我认为它会拉取相关表的所有列,即使其中一列参与创建视图。有没有办法在创建视图时只获取所涉及的列(表)。以上是关于如何通过查询从Snowflake中创建特定视图的表的主要内容,如果未能解决你的问题,请参考以下文章