依赖关系数据库:管理跨数据库引用¶
通过 Snowflake Declarative Native Apps,提供商可以使用清单驱动模型共享数据产品。在许多应用程序中,安全视图会引用其他提供商数据库中的对象。在经典的安全共享模式下,您(提供商)需要授予共享对象对每个被引用数据库的 REFERENCE_USAGE 权限。而在 Declarative Native Apps 中,您可以在清单中使用 required_databases 声明这些依赖关系数据库,从而确保安装(尤其是在其他区域)能够可靠地解析跨数据库引用。这同样适用于安全视图所使用的语义视图、用户定义函数 (UDFs) 或存储过程。
何时使用 required_databases¶
每当 shared_content 中的共享对象引用未列在 shared_content/databases 下的数据库对象时,您必须将该数据库包含在 required_databases 中。这对于跨区域部署至关重要,因为在这些场景下无法假定这些依赖关系已经存在。例如,在以下情况下需要配置:
共享数据库中的安全视图对其他提供商数据库中的表或视图执行了JOIN/SELECT 操作
视图引用了位于其他数据库中的UDFs 或存储过程
通过
application_content包含的笔记本(如果笔记本逻辑或查询的视图依赖于其他数据库中的对象)语义视图,其底层物理表或视图位于其他数据库
跨数据库依赖关系非常常见。如果您没有显式声明外部数据库,则应用程序可能会在提供商的区域中成功验证或安装,但在其他区域中会失败,因为无法解析所需的引用。required_databases 通过提供依赖关系数据库的声明性列表,消除了这种不确定性,确保无论应用程序在哪个区域构建、发布或安装,这些数据库都会存在且可解析。
如果任何依赖关系数据库未在`required_databases` 中显式声明,包版本的发布将被阻止。在 BUILD、COMMIT 或 RELEASE 时,系统会生成错误消息,明确指出清单的 required_databases 部分缺少被引用的数据库。
何时无需使用 required_databases¶
请注意,将数据库包含在 required_databases 中不适用于:
完全包含在
shared_content/databases下列出的数据库中的对象经典共享,该模式使用对共享的权限授予(包括 REFERENCE_USAGE),而非清单声明
复制限制¶
在 required_databases 中声明数据库并不会复制这些数据库或其内容。它用于注册依赖关系,以便框架和列表工作流程能够正确准备并解析引用。
当您的清单使用 required_databases 时,为支持跨区域安装和故障转移,请执行以下操作:
识别依赖关系数据库:对于
shared_content.required_databases下的每个条目,确认其在源账户中对应哪个提供商拥有的数据库。为每个依赖关系配置复制:针对每个依赖关系数据库,向计划构建、发布和安装应用程序的区域及账户设置数据库(或账户)复制。此步骤可使用 Snowflake 标准复制功能完成。
保持名称一致:确保目标区域中的数据库名称与您在
required_databases中声明的名称完全一致。名称不匹配会导致 BUILD/COMMIT/RELEASE 失败并显示错误,指出required_databases中缺少被引用的数据库。复制完成后验证:在初始复制及任何后续刷新完成后,在目标区域中运行 BUILD、COMMIT 或 RELEASE 命令。如果出现依赖关系数据库未解析或缺失的错误,请检查:
数据库是否已复制到目标账户和区域且在其中可用。
数据库名称是否与
required_databases中的值匹配。这些数据库依赖的任何链式依赖关系是否也已复制并正确命名。
有关配置数据库和账户复制的端到端步骤和选项,请参阅 跨多个账户的复制和故障转移简介。