Este tópico descreve as tarefas associadas à criação de bancos de dados a partir de compartilhamentos disponibilizados pelos provedores de dados e, em seguida, a utilização dos bancos de dados para consultas e outras operações.
As tarefas descritas neste tópico não se aplicam às contas de leitor. Se você estiver usando uma conta de leitor para consumir dados importados, não precisará executar nenhuma dessas tarefas, pois elas já foram concluídas por um administrador da conta de provedor.
Limitações gerais para bancos de dados importados¶
Os bancos de dados importados têm as seguintes limitações para os consumidores:
Os bancos de dados importados são somente leitura. Os usuários em uma conta de consumidor podem visualizar/consultar dados, mas não podem inserir ou atualizar dados ou criar quaisquer objetos no banco de dados.
As seguintes ações não têm suporte:
Criação de um clone de um banco de dados importado ou de quaisquer esquemas/tabelas no banco de dados.
Time Travel para um banco de dados importado ou quaisquer esquemas/tabelas no banco de dados.
Edição dos comentários de um banco de dados importado.
Você pode visualizar os compartilhamentos que estão disponíveis para consumo em sua conta usando a interface da Web ou SQL:
To view shares that have been shared with you, In the navigation menu, select Data sharing»Internal sharing, then select Shared With You.
Nesta página, você pode ver o seguinte:
Listagens compartilhadas de forma privada que foram compartilhadas com você. Você também pode ver as listagens de Data Exchange às quais você tem acesso.
Compartilhamentos diretos que foram compartilhados com você. Dependendo do status do compartilhamento, eles são agrupados em duas seções:
Compartilhamentos diretos que estão prontos para receber (ou seja, não foi criado um banco de dados a partir do compartilhamento).
Compartilhamentos diretas que foram importados para um banco de dados e que estão prontos para consulta.
Para visualizar listagens do Snowflake Marketplace que foram importadas para um banco de dados e estão prontas para consulta, siga estas etapas:
Dois compartilhamentos, sales_s e sales_s2, estão disponíveis. INBOUND na coluna kind especifica que um provedor de dados disponibilizou o compartilhamento para consumo em sua conta.
The name column displays the name of each share, in the form of share_name (e.g. SALES_S).
A coluna owner_account exibe o nome da conta que forneceu cada compartilhamento, no formato orgname.account_name.
Se a coluna database_name estiver vazia, ainda não foi criado um banco de dados em sua conta a partir do compartilhamento.
O compartilhamento consiste em um esquema, aggregates_eula, com uma tabela, aggregate_1. Cada nome de objeto, incluindo o próprio banco de dados, é prefixado com <DB>. Isto indica que ainda não foi criado um banco de dados (em sua conta) a partir do compartilhamento.
Criação de um banco de dados a partir de um compartilhamento¶
Você pode criar um banco de dados a partir de um compartilhamento utilizando a interface da web ou SQL:
Onde provider_account é o nome da conta que forneceu o compartilhamento e share_name é o nome do compartilhamento a partir do qual será criado o banco de dados.
Nota
Um compartilhamento só pode ser consumido uma vez por conta.
Para ver os objetos que estão sendo importados antes de criar um banco de dados, use o comando DESCRIBE SHARE.
Quando um banco de dados é criado a partir de um compartilhamento, apenas a função usada para criar o banco de dados pode acessar objetos no banco de dados por padrão. Para obter instruções sobre como conceder acesso a outras funções, consulte Concessão de privilégios em um banco de dados importado (neste tópico).
Concessão de privilégios em um banco de dados importado¶
As instruções para conceder acesso aos objetos em um compartilhamento diferem dependendo se o provedor segmentou os objetos em um compartilhamento usando funções de banco de dados. Esta opção associa diferentes objetos no compartilhamento com diferentes funções de banco de dados.
Note que um único compartilhamento pode incluir tanto objetos que são acessíveis via funções de banco de dados quanto objetos que não estão associados a uma função de banco de dados.
Option 1: Objects in a share aren’t associated with a database role¶
Permita que os usuários acessem objetos em um compartilhamento concedendo o privilégio IMPORTED PRIVILEGES em um banco de dados importado a uma ou mais funções em sua conta.
Uma função só pode conceder IMPORTED PRIVILEGES em um banco de dados importado em um dos seguintes casos:
É proprietário do banco de dados importado (ou seja, tem o privilégio OWNERSHIP sobre o banco de dados).
Recebeu o privilégio global MANAGE GRANTS.
Atribuição de IMPORTED PRIVILEGES a outras funções¶
You can assign this role to other roles using either Snowsight or SQL:
Selecione Catalog»Database Explorer.
Selecione o banco de dados ao qual deseja conceder privilégios.
In the Privileges section, select + Privileges.
Selecione uma função e um privilégio para conceder a essa função.
Como r2 não tem o privilégio OWNERSHIP para o banco de dados, para poder realizar uma das seguintes operações de concessão ou revogação, a função r2 precisa ter o privilégio MANAGE GRANTS para a conta:
Opção 2: objetos em um compartilhamento associados a uma função de banco de dados¶
Permita que os usuários acessem objetos em um compartilhamento concedendo a função de banco de dados apropriada no banco de dados importado a uma ou mais funções em sua conta.
Etapa 1: criar um banco de dados a partir do compartilhamento.¶
A execução deste comando exige uma função com os privilégios globais CREATE DATABASE e IMPORT SHARE.
Por exemplo, crie bancos de dados c1 do provedor provider1 e compartilhamento share1:
CREATEDATABASEc1FROMSHAREprovider1.share1;
Copy
Etapa 2: concessão de funções de banco de dados às funções em nível de conta¶
Conceda funções de banco de dados a funções em sua conta para permitir que os usuários com essas funções acessem objetos de banco de dados no compartilhamento.
Use a função que você usou para criar o banco de dados a partir do compartilhamento.
Por exemplo, consulte as funções de banco de dados disponíveis e conceda a função de banco de dados c1.r1 à função analyst em sua conta:
SHOW DATABASE ROLESinDATABASEc1;GRANTDATABASE ROLEc1.r1TOROLEanalyst;
Copy
Criação de fluxos em exibições ou tabelas compartilhadas¶
A criação de fluxos em objetos compartilhados (exibições ou tabelas seguras) permite rastrear as alterações de linguagem de manipulação de dados (DML) feitas nesses objetos. Esta funcionalidade é semelhante à criação e utilização de fluxos em objetos “locais” (ou seja, na mesma conta que o fluxo).
A função usada para executar as instruções SQL nesta seção deve ter as concessões necessárias na tabela ou exibição segura compartilhada. Para obter mais informações, consulte Concessão de privilégios em um banco de dados importado (neste tópico).
Para obter mais informações sobre a criação de fluxos, consulte CREATE STREAM.
Nota
O provedor de dados deve permitir o rastreamento de alterações em exibições ou tabelas para que você possa criar fluxos para estes objetos. Se você não puder criar fluxos em um objeto compartilhado desejado, entre em contato com o provedor de dados para considerar a possibilidade de rastrear as alterações no objeto.
Para evitar que um fluxo se torne obsoleto, consuma os registros do fluxo dentro de uma transação durante o período de retenção para a tabela. Entre em contato com o provedor de dados para determinar o período de retenção de dados para a tabela.
Para determinar se um fluxo tornou-se obsoleto, execute o comando DESCRIBE STREAM ou SHOW STREAMS. Na saída do comando, quando o valor da coluna STALE é TRUE, o fluxo pode estar desatualizado. Na prática, a leitura a partir do fluxo pode ser bem-sucedida por algum tempo após o esperado STALE_AFTER. Entretanto, o fluxo pode se tornar obsoleto a qualquer momento durante este período.