Compartilhe conteúdo de dados em um Snowflake Native App¶
Este tópico descreve como os provedores podem adicionar conteúdo de dados compartilhados com um Snowflake Native App.
Nota
Os provedores podem publicar um Snowflake Native App para o Snowflake Marketplace como uma listagem de teste limitada. Para publicar um aplicativo como uma listagem de teste, consulte Como se preparar para oferecer uma listagem de avaliação limitada.
Sobre dados compartilhados em um Snowflake Native App¶
O Snowflake Native App Framework permite que os provedores adicionem conteúdo de dados compartilhados a um aplicativo. Esse conteúdo de dados é compartilhado com os consumidores quando eles instalam e usam o aplicativo. Para compartilhar conteúdo de dados, os provedores devem conceder privilégios nos dados compartilhados ao pacote de aplicativo. O conteúdo de dados que os provedores compartilham com um pacote de aplicativo é compartilhado entre todas as instâncias instaladas do aplicativo.
Cuidado
O conteúdo de dados compartilhados não é versionado, o que significa que todas as versões de um aplicativo usam os mesmos dados.
Os consumidores não podem acessar o conteúdo compartilhado diretamente. Em vez disso, um provedor cria uma exibição segura no script de configuração de um pacote de aplicativo e concede ao consumidor acesso à exibição segura. Para obter mais detalhes, consulte Como permitir que os consumidores acessem objetos compartilhados em um aplicativo.
Objetos de banco de dados que podem ser compartilhados¶
O Snowflake Native App Framework permite que os provedores adicionem os seguintes objetos de banco de dados a um pacote de aplicativo:
Esquemas
Tabelas, incluindo tabelas externas e Apache Iceberg™
Exibições
Nota
Ao compartilhar objetos de banco de dados, como tabelas e exibições, você também deve compartilhar o esquema que os contém.
As seguintes restrições se aplicam a tabelas e exibições compartilhadas em um pacote de aplicativo:
As tabelas não podem ter colunas virtuais, incluindo políticas, contendo código Java, Python ou JavaScript.
As definições de exibição ou colunas virtuais associadas a elas, como políticas, não podem conter chamadas para Java, Python ou JavaScript
As tabelas compartilhadas não podem ser tabelas temporárias, voláteis ou transitórias.
O preenchimento automático entre nuvens não é compatível com aplicativos com tabelas externas ou Apache Iceberg™.
Restrições ao compartilhamento de conteúdo de dados que contém políticas¶
Algumas funções comumente referenciadas por políticas, como CURRENT_USER, se comportam de maneira diferente no contexto de um aplicativo instalado em uma conta de consumidor. Embora uma política definida por um provedor possa funcionar corretamente na conta do provedor, ela pode não funcionar corretamente na conta do consumidor depois que o consumidor instala o aplicativo.
A Snowflake recomenda que os provedores definam políticas nas visualizações de proxy especificadas no script de configuração. Definir políticas nas visualizações de proxy garante que a definição das políticas não possa ser alterada após a instalação de um aplicativo. A definição de políticas em exibições de proxy também garante que, durante as atualizações, o código em execução continue a usar as políticas que foram aplicadas quando a versão foi criada.
Privilégios Grant em conteúdo compartilhado para um pacote de aplicativo¶
Para incluir conteúdo de dados compartilhados em um aplicativo, os provedores devem conceder privilégios no objeto a ser compartilhado com o pacote do aplicativo. Quando os provedores adicionam um objeto a um pacote de aplicativo, por padrão, o objeto é privado para o pacote de aplicativo e não fica visível quando o aplicativo é instalado.
Para tornar objetos visíveis para um aplicativo instalado do pacote de aplicativo, use o comando GRANT … TO SHARE IN APPLICATION PACKAGE, conforme mostrado no exemplo a seguir:
CREATE APPLICATION PACKAGE app_package;
GRANT USAGE ON SCHEMA app_package.shared_schema
TO SHARE IN APPLICATION PACKAGE app_package;
GRANT SELECT ON TABLE app_package.shared_schema.shared_table
TO SHARE IN APPLICATION PACKAGE app_package;
Neste exemplo, o primeiro comando concede o privilégio USAGE no esquema shared_schema
ao pacote do aplicativo. Este comando permite que o esquema seja compartilhado com os consumidores. O segundo comando concede o privilégio SELECT na tabela shared_table
dentro do shared_schema
para o pacote do aplicativo. Este comando permite que os consumidores consultem a tabela.
Depois que um consumidor instala um aplicativo do pacote de aplicativo app_package
, ele pode acessar shared_schema
e consultar shared_table
.
Nota
Ao adicionar um objeto compartilhado a um pacote de aplicativo, você também deve compartilhar o esquema que contém o objeto.
Você também pode compartilhar exibições com um aplicativo usando comandos SQL semelhantes.
Privilégios Grant em objetos fora do pacote do aplicativo¶
Para compartilhar um objeto de banco de dados que existe fora do pacote do aplicativo, os provedores devem criar exibições no pacote do aplicativo que permitam o acesso ao objeto. Não é possível compartilhar objetos fora do pacote do aplicativo diretamente com o aplicativo instalado na conta do consumidor.
Por exemplo, para compartilhar um banco de dados fora do pacote do aplicativo, conceda o privilégio REFERENCE_USAGE no banco de dados ao pacote do aplicativo, conforme mostrado no exemplo a seguir:
GRANT REFERENCE_USAGE ON DATABASE other_db
TO SHARE IN APPLICATION PACKAGE app_pkg;
Após conceder REFERENCE_USAGE no banco de dados externo, um provedor deve criar uma exibição dentro do aplicativo para referenciar os objetos compartilhados, conforme mostrado no exemplo a seguir:
CREATE VIEW app_pkg.shared_schema.shared_view
AS SELECT c1, c2, c3, c4
FROM other_db.other_schema.other_table;
Este comando cria uma exibição no pacote do aplicativo que faz referência ao banco de dados, à tabela e ao esquema que estão fora do pacote do aplicativo.
Após criar a exibição, você deve conceder privilégios no esquema e exibição para o aplicativo conforme o exemplo a seguir:
GRANT USAGE ON SCHEMA app_pkg.shared_schema
TO SHARE IN APPLICATION PACKAGE app_pkg;
GRANT SELECT ON VIEW app_pkg.shared_schema.shared_view
TO SHARE IN APPLICATION PACKAGE app_pkg;
Como permitir que os consumidores acessem objetos compartilhados em um aplicativo¶
Objetos de banco de dados criados no script de configuração ficam diretamente acessíveis ao aplicativo após a instalação. Isso inclui tabelas, funções, procedimentos e novas definições de exibição.
Entretanto, por padrão, objetos de banco de dados compartilhados com um pacote de aplicativo não são visíveis aos consumidores. Para permitir que os consumidores visualizem e acessem o conteúdo dos dados, o pacote de aplicativo deve criar uma exibição segura e conceder os privilégios apropriados.
Essa abordagem oferece as seguintes vantagens:
A criação da exibição no script de configuração garante que as alterações feitas diretamente nos objetos compartilhados, como novas colunas, não fiquem visíveis para a versão do Snowflake Native App que está sendo instalado pelo script de configuração. Para permitir acesso a alterações no objeto, os provedores devem criar uma nova versão ou patch para o aplicativo.
A criação da exibição em um esquema com versão garante que cada versão do Snowflake Native App contenha apenas a definição da exibição para essa versão. Isso é importante para cenários de atualização.
Para expor objetos compartilhados a um consumidor, o script de configuração deve incluir comandos para:
Instalar exibições dentro de um esquema com versão no pacote de aplicativo.
Conceder acesso a essas exibições ao consumidor usando uma função de aplicativo.
O exemplo a seguir descreve como usar funções de aplicativo para conceder acesso a objetos compartilhados no script de configuração do pacote de aplicativo:
CREATE APPLICATION ROLE app_user;
CREATE OR ALTER VERSIONED SCHEMA inst_schema;
GRANT USAGE ON SCHEMA inst_schema
TO APPLICATION ROLE app_user;
CREATE VIEW IF NOT EXISTS inst_schema.shared_view
AS SELECT c1, c2, c3, c4
FROM shared_schema.shared_table;
GRANT SELECT ON VIEW inst_schema.shared_view
TO APPLICATION ROLE app_user;
Neste exemplo, a exibição acessa o conteúdo no shared_schema.shared_view
e o compartilha com o pacote do aplicativo.
Nota
Se um provedor tentar definir uma exibição que acesse diretamente o conteúdo de dados compartilhados, como um objeto de banco de dados externo ao pacote do aplicativo, o Snowflake retornará um erro.
Definição de políticas em exibições de proxy¶
A Snowflake recomenda que você crie visualizações de proxy e defina políticas para protegê-las no script de configuração. A definição de políticas para proteger a exibição do proxy garante que a definição de políticas não possa ser alterada após a instalação do Snowflake Native App. A definição de políticas em exibições de proxy também garante que, durante as atualizações, o código em execução continue a usar as políticas que são aplicadas quando a versão atualizada é criada.
Suporte para tabelas externas e Apache Iceberg™¶
O Snowflake Native App Framework permite que provedores compartilhem tabelas externas e Tabelas Apache Iceberg™ com consumidores. O método para compartilhar esses tipos de tabelas é semelhante ao de tabelas normais, pois os provedores adicionam exibições ao script de configuração e concedem privilégios sobre essas exibições a uma função do aplicativo.
Cuidado
Tabelas externas e Apache Iceberg™ podem incorrer em custos adicionais de entrada ou saída para o provedor ou consumidor se o armazenamento de objeto de suporte não estiver na mesma região que a listagem do aplicativo.
As seguintes restrições e requisitos se aplicam ao compartilhar uma tabela externa ou Iceberg:
As tabelas externas e Iceberg e as exibições que as acessam são somente leitura para o aplicativo.
O preenchimento automático entre nuvens não é compatível com aplicativos que compartilham tabelas externas ou Iceberg.
Os consumidores devem permitir que o aplicativo use uma tabela externa ou Iceberg na conta do provedor antes que ela esteja disponível para o aplicativo.
Incompatibilidade com o preenchimento automático entre nuvens¶
Tabelas externas e Iceberg não são compatíveis para aplicativos com listagens que permitem o preenchimento automático entre nuvens.
Nota
Para publicar um aplicativo que usa tabelas externas ou Iceberg em várias regiões Snowflake, os provedores devem publicar a listagem em cada região.
Se um provedor criar uma listagem para um aplicativo que inclua uma tabela externa ou Iceberg, a capacidade de configurar o preenchimento automático entre nuvens será desabilitada no Snowsight.
Se um provedor tentar adicionar uma versão ou patch a um pacote de aplicativo que seja o produto de dados de uma listagem com preenchimento automático entre nuvens configurado, o Snowflake retornará um erro.
Como adicionar uma tabela externa ou Iceberg a um aplicativo¶
Além de adicionar uma tabela externa ou Iceberg ao pacote do aplicativo, os provedores devem executar o seguinte:
Adicione uma entrada ao arquivo de manifesto para habilitar tabelas externas e Iceberg. Consulte Como adicionar uma entrada para tabelas externas e Iceberg ao manifesto para obter mais informações.
Os provedores podem usar Python Permission SDK para permitir que os consumidores usem Snowsight para habilitar o aplicativo e acessar uma tabela externa ou Iceberg. Como alternativa, os provedores podem pedir aos consumidores que habilitem a tabela externa ou Iceberg manualmente. Consulte Solicitação de permissões para acessar tabelas externas e Iceberg para obter mais informações.
Cuidado ao revogar privilégios ou descartar objetos compartilhados¶
Tenha cuidado ao revogar privilégios de objetos compartilhados em um pacote de aplicativos ou ao descartar objetos compartilhados. Se uma versão instalada de um Snowflake Native App ainda exigir acesso a esses objetos, o Snowflake Native App poderá ficar instável ou falhar.
Revogar e descartar permissões em objetos compartilhados¶
Tenha cuidado ao revogar permissões em objetos compartilhados de um pacote de aplicativo ou ao descartar objetos compartilhados. Se uma versão instalada do Snowflake Native App ainda exigir acesso a esses objetos, o Snowflake Native App poderá ficar instável ou falhar.