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 » 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, vá para Marketplace no menu de navegação. Para obter mais informações, consulte Exploração das listagens.

Classic Console

Selecione Shares Shares tab 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;
Copy

A saída mostra:

  • 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.

  • A coluna name exibe o nome de cada compartilhamento, na forma de share_name (por exemplo, SALE_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.

+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
| 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 |
+----------+------------------------------------+---------------------------------+
Copy

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:

Snowsight
  1. Entre em Snowsight.

  2. Selecione Data » Private Sharing.

  3. Selecione a guia Shared with You.

  4. Na seção Ready to Get, selecione o compartilhamento para o qual você deseja criar um banco de dados.

  5. Defina um nome de banco de dados e as funções que são permitidas para acessar o banco de dados.

  6. Selecione Get Data.

Classic Console
  1. Selecione Shares Shares tab e, em seguida, selecione o botão de alternância Inbound.

  2. Selecione um compartilhamento do qual ainda não tenha sido criado um banco de dados (ou seja, a coluna Database está vazia).

  3. Selecione Create Database from Share.

  4. Siga as instruções fornecidas no diálogo.

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>
Copy

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 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              |
+---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------+
Copy

Neste 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 Databases tab » <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

  1. Função r1 cria banco de dados snow_sales a partir do compartilhamento xy12345.sales_s:

    use role r1;
    create database snow_sales from share xy12345.sales_s;
    
    Copy
  2. A função r1 concede IMPORTED PRIVILEGES no banco de dados snow_sales à função r2:

    grant imported privileges on database snow_sales to role r2;
    
    Copy
  3. 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:

    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;
Copy

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;
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 compartilhado (neste tópico).

  • Para criar fluxos em exibições compartilhadas:

    CREATE STREAM <name> ON VIEW <shared_db>.<schema>.<view>;
    
    Copy

    Por exemplo, crie um fluxo na exibição compartilhada aggregate_1_v no banco de dados e esquema snow_sales.aggregates_eula:

    CREATE STREAM aggregate_1_v_stream ON VIEW snow_sales.aggregates_eula.aggregate_1_v;
    
    Copy
  • Para criar fluxos em tabelas compartilhadas:

    CREATE STREAM <name> ON TABLE <shared_db>.<schema>.<table>;
    
    Copy

    Por exemplo, crie um fluxo de tabela para a tabela compartilhada aggregate_1 no banco de dados e esquema snow_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