Consumo de dados compartilhados¶
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.
Você deve usar a função ACCOUNTADMIN (ou uma função com o privilégio global IMPORT SHARE) para realizar estas tarefas. Para obter mais detalhes sobre o privilégio IMPORT SHARE, consulte Habilitação de funções diferentes de ACCOUNTADMIN para executar tarefas de compartilhamento de dados.
Nota
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 compartilhados, não precisa realizar nenhuma dessas tarefas porque elas já foram completadas por um administrador da conta do provedor.
Neste tópico:
Limitações gerais para bancos de dados compartilhados¶
Os bancos de dados compartilhados têm as seguintes limitações para os consumidores:
Os bancos de dados compartilhados são apenas de 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 compartilhado ou quaisquer esquemas/tabelas no banco de dados.
Time Travel para um banco de dados compartilhado ou quaisquer esquemas/tabelas no banco de dados.
Edição dos comentários de um banco de dados compartilhado.
Bancos de dados compartilhados e todos os objetos do banco de dados não podem ser compartilhados novamente com outras contas.
Os bancos de dados compartilhados não podem ser replicados.
Visualização dos compartilhamentos disponíveis¶
Você pode visualizar os compartilhamentos que estão disponíveis para consumo em sua conta usando a interface da Web ou SQL:
- Snowsight:
Selecione Data Products » Private Sharing e depois selecione Shared With You. 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 ver as listagens do Snowflake Marketplace que foram importadas para um banco de dados e estão prontas para consulta, selecione Data Products » Marketplace no menu de navegação. Para obter mais informações, consulte Exploração das listagens.
- Classic Console:
Selecione Shares e, em seguida, selecione o botão de alternância Inbound.
A página exibe todos os compartilhamentos disponíveis para sua conta. A coluna Database exibe o nome do banco de dados criado a partir do compartilhamento. Se a coluna estiver vazia, ainda não foi criado um banco de dados (em sua conta) a partir do compartilhamento.
- SQL:
Execute uma instrução SHOW SHARES ou DESCRIBE SHARE.
Por exemplo, usando SQL:
SHOW SHARES;
CopyA saída mostra:
Dois compartilhamentos,
sales_s
esales_s2
, estão disponíveis.INBOUND
na colunakind
especifica que um provedor de dados disponibilizou o compartilhamento para consumo em sua conta.A coluna
name
exibe o nome de cada compartilhamento, na forma deshare_name
(por exemplo,SALE_S
).A coluna
owner_account
exibe o nome da conta que forneceu cada compartilhamento, no formatoorgname.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.
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+ | created_on | kind | owner_account | name | database_name | to | owner | comment | listing_global_name | | |-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------|---------------------| | 2017-07-09 19:18:09.821 -0700 | INBOUND | SNOW.XY12345 | SALES_S2 | UPDATED_SALES_DB | | | Transformed and updated sales data | | | 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.MY_TEST_ACCOUNT | SALES_S | SALES_DB | XY12345, YZ23456 | ACCOUNTADMIN | | | +-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
O exemplo a seguir usa o comando DESCRIBE SHARE para mostrar os objetos (banco de dados, esquemas e tabelas) que estão no compartilhamento sales_s
:
DESC SHARE xy12345.sales_s; +----------+------------------------------------+---------------------------------+ | kind | name | shared_on | |----------+------------------------------------+---------------------------------| | DATABASE | <DB> | Thu, 15 Jun 2017 17:03:16 -0700 | | SCHEMA | <DB>.AGGREGATES_EULA | Thu, 15 Jun 2017 17:03:16 -0700 | | TABLE | <DB>.AGGREGATES_EULA.AGGREGATE_1 | Thu, 15 Jun 2017 17:03:16 -0700 | | VIEW | <DB>.AGGREGATES_EULA.AGGREGATE_1_v | Thu, 15 Jun 2017 17:03:16 -0700 | +----------+------------------------------------+---------------------------------+CopyO 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:
- Snowsight:
Entre em Snowsight.
Selecione Data Products » Private Sharing.
Selecione a guia Shared with You.
Na seção Ready to Get, selecione o compartilhamento para o qual você deseja criar um banco de dados.
Defina um nome de banco de dados e as funções que são permitidas para acessar o banco de dados.
Selecione Get Data.
- Classic Console:
- SQL:
Execute uma instrução CREATE DATABASE com a seguinte sintaxe específica de compartilhamento de dados:
CREATE DATABASE <name> FROM SHARE <provider_account>.<share_name>
CopyOnde
provider_account
é o nome da conta que forneceu o compartilhamento eshare_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 compartilhados 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 a concessão de acesso a outras funções, consulte Concessão de privilégios em um banco de dados compartilhado (neste tópico).
Exemplos SQL¶
O exemplo seguinte cria um novo banco de dados com o nome snow_sales
em sua conta a partir do compartilhamento sales_s
:
CREATE DATABASE snow_sales FROM SHARE xy12345.sales_s;Copy
Liste o novo banco de dados snow_sales
:
SHOW DATABASES LIKE 'snow%'; +---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------+ | created_on | name | is_default | is_current | origin | owner | comment | options | retention_time | |---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------| | Sun, 10 Jul 2016 23:28:50 -0700 | SNOWFLAKE_SAMPLE_DATA | N | N | SFC_SAMPLES.SAMPLE_DATA | ACCOUNTADMIN | | | 1 | | Thu, 15 Jun 2017 18:30:08 -0700 | SNOW_SALES | N | Y | xy12345.SALES_S | ACCOUNTADMIN | | | 1 | +---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------+CopyNeste exemplo, a coluna
origin
indica o nome totalmente qualificado do compartilhamento a partir do qual o banco de dados foi criado.
Da mesma forma, a saída de SHOW SHARES e DESC SHARE inclui o nome do banco de dados que foi criado a partir do compartilhamento:
SHOW SHARES;Copy+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+ | created_on | kind | owner_account | name | database_name | to | owner | comment | listing_global_name | |-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------|---------------------| | 2017-07-09 19:18:09.821 -0700 | INBOUND | SNOW.XY12345 | SALES_S2 | UPDATED_SALES_DB | | | Transformed and updated sales data | | | 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.MY_TEST_ACCOUNT | SALES_S | SALES_DB | XY12345, YZ23456 | ACCOUNTADMIN | | | +-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+DESC SHARE xy12345.sales_s; +----------+------------------------------------------+---------------------------------+ | kind | name | shared_on | |----------+------------------------------------------+---------------------------------| | DATABASE | SNOW_SALES | Thu, 15 Jun 2017 17:03:16 -0700 | | SCHEMA | SNOW_SALES.AGGREGATES_EULA | Thu, 15 Jun 2017 17:03:16 -0700 | | TABLE | SNOW_SALES.AGGREGATES_EULA.AGGREGATE_1 | Thu, 15 Jun 2017 17:03:16 -0700 | | VIEW | SNOW_SALES.AGGREGATES_EULA.AGGREGATE_1_v | Thu, 15 Jun 2017 17:03:16 -0700 | +----------+------------------------------------------+---------------------------------+Copy
Concessão de privilégios em um banco de dados compartilhado¶
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.
Opção 1: objetos em um compartilhamento não associados a uma função de banco de dados¶
Permita que os usuários acessem objetos em um compartilhamento, concedendo o privilégio IMPORTED PRIVILEGES em um banco de dados compartilhado a um 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¶
Você pode atribuir esta função a outras funções usando ou a interface da Web ou SQL:
- Classic Console:
Clique em Databases » <nome_bd_compartilhado>.
No painel lateral, clique em Grant Privileges e atribua o privilégio a uma ou mais funções.
- SQL:
Execute uma instrução GRANT <privilégios>.
Para ver as funções que têm privilégios USAGE em um banco de dados compartilhado, use a interface da Web ou o comando SHOW GRANTS.
Exemplos SQL¶
Função
r1
cria banco de dadossnow_sales
a partir do compartilhamentoxy12345.sales_s
:use role r1; create database snow_sales from share xy12345.sales_s;
CopyA função
r1
concede IMPORTED PRIVILEGES no banco de dadossnow_sales
à funçãor2
:grant imported privileges on database snow_sales to role r2;
CopyComo
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çãor2
precisa ter o privilégio MANAGE GRANTS para a conta:use role r2; grant imported privileges on database snow_sales to role r3; revoke imported privileges on database snow_sales from role r3;
Copy
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 adequada em um banco de dados compartilhado a um ou mais funções em sua conta.
Etapa 1: criar um banco de dados a partir do compartilhamento.¶
Crie um banco de dados a partir de um compartilhamento usando CREATE DATABASE … FROM SHARE.
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
:
CREATE DATABASE c1 FROM SHARE provider1.share1;
Etapa 2: conceder funções de banco de dados compartilhado para suas funções de nível de conta¶
Conceda funções de banco de dados compartilhadas a funções em sua conta para permitir que 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 ROLES in DATABASE c1;
GRANT DATABASE ROLE c1.r1 TO ROLE analyst;
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 compartilhado (neste tópico).
Para criar fluxos em exibições compartilhadas:
CREATE STREAM <name> ON VIEW <shared_db>.<schema>.<view>;
CopyPor exemplo, crie um fluxo na exibição compartilhada
aggregate_1_v
no banco de dados e esquemasnow_sales.aggregates_eula
:CREATE STREAM aggregate_1_v_stream ON VIEW snow_sales.aggregates_eula.aggregate_1_v;
CopyPara criar fluxos em tabelas compartilhadas:
CREATE STREAM <name> ON TABLE <shared_db>.<schema>.<table>;
CopyPor exemplo, crie um fluxo de tabela para a tabela compartilhada
aggregate_1
no banco de dados e esquemasnow_sales.aggregates_eula
:CREATE STREAM aggregate_1_stream ON TABLE snow_sales.aggregates_eula.aggregate_1;
Copy
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.
Consulta de um banco de dados compartilhado¶
Consultar um banco de dados compartilhado é o mesmo que consultar qualquer outro banco de dados em sua conta.
Por exemplo:
USE ROLE r1; USE DATABASE snow_sales; SELECT * FROM aggregates_1;Copy