Compartilhamento de dados a partir de diversos bancos de dados

Os provedor de dados do Snowflake podem compartilhar dados que se encontram em diferentes bancos de dados, utilizando exibições seguras. Uma exibição segura pode fazer referência a objetos como esquemas, tabelas e outras exibições de um ou mais bancos de dados, desde que esses bancos de dados pertençam à mesma conta.

O processo de compartilhamento de uma exibição segura que faça referência a objetos de vários bancos de dados é diferente do compartilhamento de dados que se encontram em um único banco de dados.

Além de realizar todos os passos padrão para o compartilhamento de dados, você deve conceder o privilégio REFERENCE_USAGE em cada um dos bancos de dados referenciados por uma exibição segura que você deseje compartilhar. Entretanto, você não precisa conceder REFERENCE_USAGE no banco de dados em que a exibição segura é criada.

Importante

O privilégio REFERENCE_USAGE não pode ser concedido a uma função de banco de dados para incluir objetos de múltiplos bancos de dados em um compartilhamento. Esta limitação também se aplica a objetos como exibições seguras que têm uma ou mais tabelas subjacentes em um banco de dados separado.

Para incluir vários bancos de dados em um compartilhamento, você deve conceder privilégios nos objetos diretamente ao compartilhamento. Para obter mais informações sobre esta opção, consulte Opção 2: concessão de privilégios diretamente a um compartilhamento.

Você deve conceder o privilégio separadamente em cada banco de dados referenciado em uma exibição, antes de adicionar a exibição a um compartilhamento (ou seja, ao conceder o privilégio SELECT em uma visão a um compartilhamento).

Para compartilhar uma exibição segura que faz referência a objetos de diversos bancos de dados:

  1. Conecte-se à sua conta Snowflake como um usuário com a função ACCOUNTADMIN ou uma função à qual é concedido o privilégio global CREATE SHARE. Para obter mais detalhes sobre o privilégio CREATE SHARE, consulte Habilitação de funções diferentes de ACCOUNTADMIN para executar tarefas de compartilhamento de dados.

  2. Criar um compartilhamento usando CREATE SHARE.

  3. Conceda o privilégio USAGE sobre o banco de dados que você deseja compartilhar usando GRANT <privilégio> … TO SHARE.

    Nota

    Se estiver compartilhando uma exibição segura que faz referência a objetos pertencentes a diversos bancos de dados, você deve conceder o privilégio USAGE somente ao banco de dados em que a exibição segura é criada. Você só pode conceder USAGE a um banco de dados por compartilhamento.

  4. Conceda o privilégio USAGE sobre cada esquema no banco de dados que você deseja compartilhar, usando GRANT <privilégio> … TO SHARE.

  5. Conceda o privilégio REFERENCE_USAGE sobre cada banco de dados adicional que contenha objetos referenciados pela exibição que você deseja compartilhar, usando GRANT <privilégio> … TO SHARE.

  6. Conceda o privilégio SELECT sobre a visualização que você deseja compartilhar usando GRANT <privilégio> … TO SHARE.

  7. Adicionar uma ou mais contas de consumidor ao compartilhamento usando ALTER SHARE.

Agora o compartilhamento está pronto para ser consumido pelas contas especificadas.

Nota

Para compartilhar uma exibição segura que faça referência à UDF em um banco de dados diferente, você deve tornar a UDF segura. Para obter mais detalhes sobre como criar uma UDF segura, consulte Criação de um UDF ou procedimento armazenado seguro.

Exemplos

Consulte os exemplos a seguir para criar exibições seguras.

Exemplo 1: criar e compartilhar uma exibição segura em um banco de dados existente

Um provedor que organiza os dados em diferentes bancos de dados com base nas características dos dados e nas necessidades comerciais deseja compartilhar uma exibição segura em um banco de dados que junta os dados deste banco de dados com objetos (por exemplo: esquema, tabela, exibição) em outros bancos de dados.

Relationship between databases, database objects, shares, and accounts
  1. Crie o banco de dados database1 e os dados:

    CREATE DATABASE database1;
    CREATE SCHEMA database1.sch;
    CREATE TABLE database1.sch.table1 (id INT);
    CREATE VIEW database1.sch.view1 AS SELECT * FROM database1.sch.table1;
    
    Copy
  2. Crie o banco de dados database2 e os dados:

    CREATE DATABASE database2;
    CREATE SCHEMA database2.sch;
    CREATE TABLE database2.sch.table2 (id INT);
    
    Copy
  3. Crie o banco de dados database3 e os dados:

    CREATE DATABASE database3;
    CREATE SCHEMA database3.sch;
    CREATE TABLE database3.sch.table3 (id INT);
    
    Copy
  4. Crie a exibição segura com os dados a serem compartilhados em database3:

    CREATE SECURE VIEW database3.sch.view3 AS
      SELECT view1.id AS View1Id,
             table2.id AS table2id,
             table3.id AS table3id
      FROM database1.sch.view1 view1,
           database2.sch.table2 table2,
           database3.sch.table3 table3;
    
    Copy
  5. Crie o compartilhamento e conceda todos os privilégios necessários.

    Os dados referenciados em bancos de dados adicionais pela exibição segura view3 exigem a concessão do privilégio REFERENCE_USAGE em database1 e database2 ao compartilhamento:

    CREATE SHARE share1;
    GRANT USAGE ON DATABASE database3 TO SHARE share1;
    GRANT USAGE ON SCHEMA database3.sch TO SHARE share1;
    
    GRANT REFERENCE_USAGE ON DATABASE database1 TO SHARE share1;
    GRANT REFERENCE_USAGE ON DATABASE database2 TO SHARE share1;
    
    GRANT SELECT ON VIEW database3.sch.view3 TO SHARE share1;
    
    Copy

Você pode compartilhar esses dados com consumidores em outras regiões usando um grupo de replicação para replicar dados para uma conta em outra região. Para obter instruções, consulte Exemplo 3: compartilhar dados de vários bancos de dados.

Exemplo 2: criar e compartilhar uma exibição segura em um banco de dados separado

Um provedor armazena dados de clientes em bancos de dados separados e não deseja criar novos objetos nesses bancos de dados. Para compartilhar dados, o provedor cria um novo banco de dados com uma exibição segura. A exibição segura faz referência a objetos (esquema, tabela, exibição) nos bancos de dados com dados de cliente.

Relationship between databases, database objects, shares, and accounts

Código de exemplo:

  1. Crie o banco de dados do cliente customer1_db e os dados:

    CREATE DATABASE customer1_db;
    CREATE SCHEMA customer1_db.sch;
    CREATE TABLE customer1_db.sch.table1 (id INT);
    CREATE VIEW customer1_db.sch.view1 AS SELECT * FROM customer1_db.sch.table1;
    
    Copy
  2. Crie o banco de dados do cliente customer2_db e os dados:

    CREATE DATABASE customer2_db;
    CREATE SCHEMA customer2_db.sch;
    CREATE TABLE customer2_db.sch.table2 (id INT);
    
    Copy
  3. Crie o novo banco de dados new_db e esquema sch:

    CREATE DATABASE new_db;
    CREATE SCHEMA new_db.sch;
    
    Copy
  4. Crie a exibição segura em new_db que faz referência a objetos em customer1_db e customer2_db:

    CREATE SECURE VIEW new_db.sch.view3 AS
      SELECT view1.id AS view1Id,
             table2.id AS table2ID
      FROM customer1_db.sch.view1 view1,
           customer2_db.sch.table2 table2;
    
    Copy
  5. Crie o compartilhamento e conceda todos os privilégios necessários.

    Os dados referenciados em bancos de dados adicionais pela exibição segura view3 exigem a concessão do privilégio REFERENCE_USAGE em customer1_db e customer2_db ao compartilhamento:

    CREATE SHARE share1;
    
    GRANT USAGE ON DATABASE new_db TO SHARE share1;
    GRANT USAGE ON SCHEMA new_db.sch TO SHARE share1;
    
    GRANT REFERENCE_USAGE ON DATABASE customer1_db TO SHARE share1;
    GRANT REFERENCE_USAGE ON DATABASE customer2_db TO SHARE share1;
    
    GRANT SELECT ON VIEW new_db.sch.view3 TO SHARE share1;
    
    Copy

Compartilhamento de dados de vários bancos de dados com consumidores em outras regiões

Você pode compartilhar dados de vários bancos de dados com contas de consumidores em outras regiões e plataformas de nuvem usando um grupo de replicação. Inclua o compartilhamento e cada banco de dados ao qual o compartilhamento faz referência no grupo para replicar dados para uma conta Snowflake em outra região. Você pode então adicionar contas do consumidor ao compartilhamento replicado. Para instruções detalhadas, consulte Compartilhamento de dados de forma segura entre regiões e plataformas de nuvem.