如何通过查询从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中创建特定视图的表的主要内容,如果未能解决你的问题,请参考以下文章

将数据从现有视图加载到 Snowflake 中的表并安排它每天运行 - 增量

ORACLE授权用户查询另一个用户下的表与视图

从两个不同的表中创建对两个列求和的 pgsql 视图

在 Snowflake UI 中创建环境变量文件

如何在 DbA 中创建引用 DbB 中的表的视图?

如何根据database2中的表在database1中创建视图