类别:

表函数 (对象建模)

GET_OBJECT_REFERENCES

返回指定对象引用的对象的列表。输入当前仅限于视图的名称。

下表标识了当前在输出中返回的数据库对象类型:

对象类型

是否在输出中返回?

视图(包括安全视图)

物化视图

命名暂存区(内部或外部)

用户定义的函数 (UDF)/用户定义的表函数 (UDTF)

语法

GET_OBJECT_REFERENCES(
  DATABASE_NAME => '<string>'
  , SCHEMA_NAME => '<string>'
  , OBJECT_NAME => '<string>' )
Copy

实参

DATABASE_NAME => 'string'

架构和对象所在的数据库的名称。

SCHEMA_NAME => 'string'

对象所在的架构的名称。

OBJECT_NAME => 'string'

对象名称。当前仅限于(安全或不安全)视图的名称。

返回

该函数返回以下列:

列名称

数据类型

描述

DATABASE_NAME

TEXT

包含查询对象的数据库的名称。

SCHEMA_NAME

TEXT

包含查询对象的架构的名称。

OBJECT_NAME

TEXT

查询对象的名称。

REFERENCED_DATABASE_NAME

TEXT

包含查询对象引用的对象的数据库的名称。

REFERENCED_SCHEMA_NAME

TEXT

包含查询对象引用的对象的数据库的名称。

REFERENCED_OBJECT_NAME

TEXT

查询对象引用的对象的名称。

REFERENCED_OBJECT_TYPE

TEXT

REFERENCED_OBJECT_NAME 列中标识的对象的类型。值包括 TABLE 或 VIEW。

使用说明

  • 此函数需要以下权限:

    • 视图的 SELECT 权限。要获取视图的引用,正在使用的角色或为正在使用的角色授予的角色必须具有视图的 SELECT 的权限。有关详细信息,请参阅 表权限视图权限

    • 安全视图的 OWNERSHIP 权限。如果依赖链引用任何安全视图,则正在使用的角色或为正在使用的角色授予的角色必须具有安全视图的 OWNERSHIP 权限。否则,Snowflake 返回以下错误消息:

      Insufficient privileges to operate on view '<view_name>'
      
      Copy
  • DATABASE_NAMESCHEMA_NAMEOBJECT_NAME 值必须放在单引号内。此外,如果这些名称中的任何名称包含任何空格、混合大小写字符或特殊字符,则名称必须在单引号内使用双引号(例如 '"My DB"''mydb')。

  • 如果视图引用暂存区、UDFs 或物化视图,则此函数会返回错误,而不是返回引用的表和视图的列表。

示例

返回视图的引用列表:

-- create a database
create or replace database ex1_gor_x;
use database ex1_gor_x;
use schema PUBLIC;

-- create a set of tables
create or replace table x_tab_a (mycol int not null);
create or replace table x_tab_b (mycol int not null);
create or replace table x_tab_c (mycol int not null);

-- create views with increasing complexity of references
create or replace view x_view_d as
select * from x_tab_a
join x_tab_b
using ( mycol );

create or replace view x_view_e as
select x_tab_b.* from x_tab_b, x_tab_c
where x_tab_b.mycol=x_tab_c.mycol;

--create a second database
create or replace database ex1_gor_y;
use database ex1_gor_y;
use schema PUBLIC;

-- create a table in the second database
create or replace table y_tab_a (mycol int not null);

-- create more views with increasing levels of references
create or replace view y_view_b as
select * from ex1_gor_x.public.x_tab_a
join y_tab_a
using ( mycol );

create or replace view y_view_c as
select b.* from ex1_gor_x.public.x_tab_b b, ex1_gor_x.public.x_tab_c c
where b.mycol=c.mycol;

create or replace view y_view_d as
select * from ex1_gor_x.public.x_view_e;

create or replace view y_view_e as
select e.* from ex1_gor_x.public.x_view_e e, y_tab_a
where e.mycol=y_tab_a.mycol;

create or replace view y_view_f as
select e.* from ex1_gor_x.public.x_view_e e, ex1_gor_x.public.x_tab_c c, y_tab_a
where e.mycol=y_tab_a.mycol
and e.mycol=c.mycol;

-- retrieve the references for the last view created
select * from table(get_object_references(database_name=>'ex1_gor_y', schema_name=>'public', object_name=>'y_view_f'));

+---------------+-------------+-----------+--------------------------+------------------------+------------------------+------------------------+
| DATABASE_NAME | SCHEMA_NAME | VIEW_NAME | REFERENCED_DATABASE_NAME | REFERENCED_SCHEMA_NAME | REFERENCED_OBJECT_NAME | REFERENCED_OBJECT_TYPE |
|---------------+-------------+-----------+--------------------------+------------------------+------------------------+------------------------|
| EX1_GOR_Y     | PUBLIC      | Y_VIEW_F  | EX1_GOR_Y                | PUBLIC                 | Y_TAB_A                | TABLE                  |
| EX1_GOR_Y     | PUBLIC      | Y_VIEW_F  | EX1_GOR_X                | PUBLIC                 | X_TAB_B                | TABLE                  |
| EX1_GOR_Y     | PUBLIC      | Y_VIEW_F  | EX1_GOR_X                | PUBLIC                 | X_TAB_C                | TABLE                  |
| EX1_GOR_Y     | PUBLIC      | Y_VIEW_F  | EX1_GOR_X                | PUBLIC                 | X_VIEW_E               | VIEW                   |
+---------------+-------------+-----------+--------------------------+------------------------+------------------------+------------------------+
Copy
语言: 中文