Bancos de dados de dependência: gerenciando referências entre bancos de dados

Com o Snowflake Declarative Native Apps, os provedores podem compartilhar produtos de dados usando um modelo orientado por manifesto. Em muitos apps, as exibições seguras fazem referência a objetos em bancos de dados de outros provedores. No compartilhamento seguro clássico, você (o provedor) concedeREFERENCE_USAGE em cada banco de dados referenciado para o compartilhamento. No Declarative Native Apps, você declara esses bancos de dados de dependência no manifesto usando:code:required_databases, garantindo assim que as instalações, especialmente em outras regiões, possam resolver as referências entre bancos de dados de forma confiável. Isso também se aplica a exibições semânticas, funções definidas pelo usuário (User-Defined Functions, UDFs) ou procedimentos usados por exibições seguras.

Quando usar required_databases

Você deve incluir um banco de dados em required_databases sempre que um objeto compartilhado em shared_content faz referência a objetos em um banco de dados que não está listado em:code:shared_content/databases. Isso é essencial para implantações entre regiões em que a presença dessas dependências não pode ser assumida; por exemplo, nas seguintes situações:

  • Exibições seguras no banco de dados compartilhado que executa JOIN/SELECT de tabelas ou exibições em bancos de dados de outros provedores

  • Exibições que fazem referência a UDFs ou procedimentos que residem em outros bancos de dados

  • Notebooks incluídos via application_content se a lógica do notebook ou as exibições consultadas pelo notebook dependerem de objetos em outros bancos de dados

  • Exibições semânticas cujas tabelas ou exibições físicas subjacentes estão em outro banco de dados

Dependências entre bancos de dados são comuns. Se você não declarar explicitamente os bancos de dados externos, um app poderá ser validado ou instalado com sucesso na região do provedor, mas falhará em outras regiões porque as referências necessárias não poderão ser resolvidas. required_databases remove essa ambiguidade fornecendo uma lista declarativa de bancos de dados de dependência que devem estar presentes e ser resolvíveis onde quer que o app seja criado, lançado e instalado.

O lançamento da versão do pacote será bloqueado se algum banco de dados de dependência não for declarado explicitamente em required_databases. Uma mensagem de erro será gerada no momento do BUILD, COMMIT ou RELEASE, afirmando especificamente que o banco de dados referenciado está ausente da seção required_databases do manifesto.

Quando não usar required_databases

Observe que a inclusão de um banco de dados em required_databases não se aplica a:

  • Objetos totalmente contidos nos bancos de dados listados em shared_content/databases

  • Compartilhamento clássico, que usa concessões de privilégios para compartilhamentos (incluindo REFERENCE_USAGE) em vez de declarações de manifesto

Limitações de replicação

A declaração de bancos de dados em required_databases não os replica, e nem o seu conteúdo. Ela registra a dependência para que a estrutura e os fluxos de trabalho de listagem possam preparar e resolver as referências adequadamente.

Para oferecer suporte a instalações e failover entre regiões quando seu manifesto usa required_databases:

  • Identifique os bancos de dados de dependência: Para cada entrada em shared_content.required_databases, confirme para qual banco de dados de propriedade do provedor ela é mapeado na sua conta de origem.

  • Configure a replicação para cada dependência: Configure a replicação do banco de dados (ou conta) para cada banco de dados de dependência para as regiões e contas em que você planeja criar, lançar e instalar o app. Use os recursos padrão de replicação do Snowflake para essa etapa.

  • Mantenha os nomes consistentes: Certifique-se de que os nomes dos bancos de dados nas regiões de destino correspondam exatamente aos nomes que você declara em required_databases. Incompatibilidades de nome causarão falha no BUILD/COMMIT/RELEASE com um erro indicando que falta o banco de dados referenciado em required_databases.

  • Valide após a conclusão da replicação: Após a conclusão da replicação inicial e de quaisquer atualizações subsequentes, execute os comandos BUILD, COMMIT ou RELEASE na região de destino. Se você vir erros sobre bancos de dados de dependência não resolvidos ou ausentes, verifique se:

    • O banco de dados foi replicado e está disponível na conta e região de destino.

    • O nome do banco de dados corresponde ao valor em required_databases.

    • Quaisquer dependências encadeadas das quais esses bancos de dados dependem também foram replicadas e nomeadas corretamente.

Para conferir todas as etapas e opções ao configurar a replicação de banco de dados e conta, consulte Introdução à replicação e failover em várias contas.