Consumidores de dados

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 a 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 encaminhados (ou seja, 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:

Classic Console

Clique em Shares Shares tab, depois clique no botão 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;

+---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+
| created_on                      | kind    | name                    | database_name         | to | owner | comment                                     |
|---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------|
| Thu, 15 Jun 2017 17:02:29 -0700 | INBOUND | XY12345.SALES_S         |                       |    |       |                                             |
| Thu, 15 Jun 2017 17:32:44 -0700 | INBOUND | XY12345.SALES_S2        |                       |    |       |                                             |
| Sat, 09 Jul 2016 19:18:09 -0700 | INBOUND | SFC_SAMPLES.SAMPLE_DATA | SNOWFLAKE_SAMPLE_DATA |    |       | Sample data sets provided by Snowflake      |
+---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+
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 totalmente qualificado de cada compartilhamento, na forma de provider_account.share_name (por exemplo, xy12345.sales_s).

  • Se a coluna database_name estiver vazia, ainda não foi criado um banco de dados (em sua conta) a partir do compartilhamento.

O próximo exemplo 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. Observe que 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:

Classic Console
  1. Clique em Shares Shares tab, depois clique no botão 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. Clique em 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 agora inclui o nome do banco de dados que foi criado a partir do compartilhamento:

SHOW SHARES;

+---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+
| created_on                      | kind    | name                    | database_name         | to | owner | comment                                     |
|---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------|
| Thu, 15 Jun 2017 17:02:29 -0700 | INBOUND | xy12345.SALES_S         | SNOW_SALES            |    |       |                                             |
| Thu, 15 Jun 2017 17:32:44 -0700 | INBOUND | xy12345.SALES_S2        |                       |    |       |                                             |
| Sat, 09 Jul 2016 19:18:09 -0700 | INBOUND | SFC_SAMPLES.SAMPLE_DATA | SNOWFLAKE_SAMPLE_DATA |    |       | Sample data sets provided by Snowflake      |
+---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+

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, conceda a função de banco de dados c1.r1 à função analyst em sua conta.

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