【问题标题】:Retrieve schema name from view definition从视图定义中检索模式名称
【发布时间】:2021-05-05 10:20:44
【问题描述】:

在 Snowflake 中,我使用以下 SQL 查询检索不同的视图:

SELECT * FROM "myDatabase"."mySchema"."VIEWS"

这会返回一个包含这些列的表:

TABLE_ID
TABLE_NAME
TABLE_SCHEMA_ID
TABLE_SCHEMA
TABLE_CATALOG_ID
TABLE_CATALOG
TABLE_OWNER
VIEW_DEFINITION

对于每个VIEW_DEFINITION 列条目,我正在尝试提取所有字符串<Schema_Name>.<View_Name>(或至少<Schema_Name>)。

是否可以通过 SQL 查询(或任何其他方式)来做到这一点?


编辑

我使用初始查询得到的表如下:

TABLE_ID TABLE_NAME TABLE_SCHEMA_ID TABLE_SCHEMA TABLE_CATALOG_ID TABLE_CATALOG TABLE_OWNER VIEW_DEFINITION
0001 MY_TABLE_NAME 99 MY_TABLE_SCHEMA 20 PMY_TABLE_CATALOG MY_OWNER_VIEWS_ADMIN

VIEW_DEFINITION 列包含如下查询:

"CREATE OR REPLACE VIEW My_Table_Schema_VIEWS.My_Table_Name AS
WITH STUDY_SITE_SCOPE AS (
SELECT
    ...
FROM (
       SELECT
          A.SUBJECT_NUMBER
        , A.SUBJECT_STATUS
       FROM <Schema_Name>.<View_Name_1> X
       JOIN <Schema_Name>.<View_Name_2> Y
       ...
     )
JOIN (
       SELECT
          ...
       FROM <Schema_Name>.<View_Name_3> X
       JOIN <Schema_Name>.<View_Name_4> Y
         ...
      )
..."

我试图从这个VIEW_DEFINITION 中提取所有&lt;Schema_Name&gt;.&lt;View_Name_XX&gt; 字符串(或至少是&lt;Schema_Name&gt;)。

【问题讨论】:

  • 能否请您添加输入和所需的输出数据?这将有助于更好地了解您的目标。
  • @Marcel 查看编辑

标签: sql snowflake-cloud-data-platform


【解决方案1】:

我假设您想要获取当前视图所基于的所有基本架构。

简短地回答您的问题:是的。

也许以下过程让您了解如何通过 SQL 或存储过程来解决它:

  1. 查询视图定义
  2. 在视图定义中搜索“FROM”或“JOIN”子句之后的所有字符串
  3. 提取它们并可能检查架构名称前面的数据库名称

【讨论】:

  • 是的,完全正确。我的问题是如何执行步骤 2 和 3。
【解决方案2】:

你可以使用information_schema.tables:

select t.*
from information_schema.tables t
where t.table_type = 'VIEW'

【讨论】:

  • 抱歉,我在您的命令输出中没有看到任何与架构名称相关的内容。
  • @6PO0222 。 . .它被称为TABLE_SCHEMA
猜你喜欢
  • 2020-12-20
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 2013-09-08
  • 2018-04-01
相关资源
最近更新 更多