【问题标题】:Snowflake SQL Error [3056] [0A000]: SQL compilation error: A view or function being shared cannot reference objects from other databasesSnowflake SQL 错误 [3056] [0A000]:SQL 编译错误:共享的视图或函数无法引用其他数据库中的对象
【发布时间】:2021-08-18 21:10:00
【问题描述】:

我正在尝试创建一个安全视图,添加到我的共享中,以便读者帐户可以访问它。

我的示例代码如下:

USE ROLE accountadmin;

create share DEV_SHARE1;

grant usage on database dev_infomart_db to share DEV_SHARE1;
grant usage on schema dev_infomart_db.sch to share DEV_SHARE1;

ALTER SHARE DEV_SHARE1 ADD ACCOUNTS = XXXXXX;

grant reference_usage on database DEV_EDW_DB to share DEV_SHARE1;

GRANT SELECT ON VIEW dev_infomart_db.sch.view1 TO SHARE DEV_SHARE1;

此视图 dev_infomart_db.sch.view1 指的是数据库 DEV_EDW_DB 中存在的表/视图。

我从雪花中引用了这个文档来共享来自多个数据库的数据。 https://docs.snowflake.com/en/user-guide/data-sharing-mutiple-db.html

我已按照上面链接中提供的步骤进行操作。在分享我的观点时,我仍然遇到错误:

SQL 错误 [3056] [0A000]:SQL 编译错误: 共享的视图或函数不能引用其他数据库中的对象。

任何帮助将不胜感激。

【问题讨论】:

  • 请将视图定义(完整的 CREATE VIEW 语句)添加到您的问题中
  • dev_edw_db 中的这些视图是否引用了另一个数据库中的表?

标签: snowflake-cloud-data-platform


【解决方案1】:

当一个视图包含其他视图时,通常会发生这种情况,其中一些视图引用了另一个数据库中的对象。

您可以使用 GET_OBJECT_REFERENCES 函数列出视图使用的对象:

https://docs.snowflake.com/en/sql-reference/functions/get_object_references.html

确保它们不引用其他数据库上的对象。

【讨论】:

    猜你喜欢
    • 2022-06-16
    • 2013-04-16
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    相关资源
    最近更新 更多