Detalhes das unidades de compartilhamento de dados para o Amazon Redshift - Amazon Redshift

Detalhes das unidades de compartilhamento de dados para o Amazon Redshift

Com o Amazon Redshift, é possível compartilhar dados em tempo real com segurança entre clusters do Amazon Redshift sem a necessidade de copiar ou transferir dados. As unidades de compartilhamento de dados para o Amazon Redshift permitem que você compartilhe resultados de consulta em tempo real, incluindo atualizações nos dados de origem, com qualquer cluster do Amazon Redshift na mesma ou em diferentes contas da AWS e regiões da AWS.

Valores de status das unidades de compartilhamento de dados no Amazon Redshift

Este tópico descreve os possíveis status que as unidades de compartilhamento de dados podem ter no Amazon Redshift.

Com os datashares entre contas, existem diferentes status de datashares que exigem suas ações. Uma unidade de compartilhamento de dados pode ter o status ativo, ação necessária ou inativo.

O seguinte exemplo descreve cada status do datashare e sua ação necessária:

  • Quando um administrador de cluster de produtores cria um datashare, o status de datashare no cluster de produtores é Autorização pendente. O administrador do cluster de produtores pode autorizar os consumidores de dados a acessar o datashare. Não há nenhuma ação para o administrador de cluster de consumidores.

  • Quando um administrador de cluster de produtores autoriza o datashare, o status de datashare torna-se Autorizado no cluster de produtores. Não há nenhuma ação para o administrador do cluster de produtores. Quando há pelo menos uma associação com um consumidor de dados para o datashare, o status do datashare muda de Autorizado para Ativo.

    O status do datashare torna-se então Disponível (Ação necessária no console do Amazon Redshift) no cluster de consumidores. O administrador de cluster de consumidores pode associar o datashare aos consumidores de dados ou rejeitar o datashare. O administrador de cluster de consumidores também pode usar o comando describeDatashareforConsumer da AWS CLI para visualizar o status dos datashares. Ou o administrador pode usar o comando da CLI describeDatashare e fornecer o nome do recurso da Amazon (ARN) do datashare para visualizar o status do datashare.

  • Quando o administrador de cluster de consumidores associa um datashare a consumidores de dados, o status de datashare torna-se Ativo no cluster de produtores. Quando há pelo menos uma associação com um consumidor de dados para o datashare, o status do datashare muda de Autorizado para Ativo. Não há nenhuma ação necessária para o administrador do cluster de produtores.

    O status do datashare torna-se Ativo no cluster de consumidores. Não há nenhuma ação necessária para o administrador do cluster de consumidores.

  • Quando o administrador de cluster de consumidores remove uma associação de consumidores de um datashare, o status de datashare torna-se Ativo ou Autorizado. Se torna Ativo quando existe pelo menos uma associação para o datashare com outro consumidor de dados. Se torna Autorizado quando não há nenhuma associação de consumidores com o datashare no cluster de produtores. Não há nenhuma ação para o administrador do cluster de produtores.

    O status do datashare torna-se Ação necessária no cluster de consumidores se todas as associações forem removidas. O administrador de cluster de consumidores pode resociar um datashare com os consumidores de dados quando o datashare está disponível para os consumidores.

  • Quando um administrador de cluster de consumidores recusa um datashare, o status de datashare no cluster de produtores torna-se Ação necessária eRecusado no cluster de consumidores. O administrador do cluster de produtores pode reautorizar o datashare. Não há nenhuma ação para o administrador de cluster de consumidores.

  • Quando o administrador do cluster de produtores remove a autorização de um datashare, o status do datashare torna-se Ação necessária no cluster de produtores. O administrador do cluster de produtores pode optar por voltar a autorizar a unidade de compartilhamento de dados, se necessário. Não há nenhuma ação necessária para o administrador do cluster de consumidores.

Compartilhamento de dados dentro e entre clusters

Você só precisa de unidades de compartilhamento de dados quando você está compartilhando dados entre diferentes clusters provisionados ou grupos de trabalho sem servidor do Amazon Redshift. No mesmo cluster, você pode consultar outro banco de dados usando uma notação simples de três partes database.schema.table, desde que tenha as permissões necessárias nos objetos do outro banco de dados.

Gerenciar permissões para unidades de compartilhamento de dados no Amazon Redshift

Como administrador de cluster de produtores, você mantém o controle para os conjuntos de dados que está compartilhando. Você pode adicionar novos objetos ao datashare ou removê-los de lá. Você também pode conceder ou revogar acesso a unidades de compartilhamento de dados como um todo para os clusters de consumidores, contas da AWS ou regiões da AWS. Quando as permissões são revogadas, os clusters de consumidor perdem imediatamente o acesso aos objetos compartilhados e deixam de visualizá-los na lista de unidades de compartilhamento de dados INBOUND no SVV_DATASHARES.

O exemplo a seguir cria a unidade de compartilhamento de dados salesshare e adiciona o esquema public e a tabela public.tickit_sales_redshift a salesshare. Ele também concede permissões de uso em salesshare ao namespace de cluster especificado.

CREATE DATASHARE salesshare; ALTER DATASHARE salesshare ADD SCHEMA public; ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift; GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

Para CREATE DATASHARE, superusuários e proprietários de bancos de dados podem criar conjuntos de dados. Para obter mais informações, consulte CREATE DATASHARE. Para ALTER DATASHARE, o proprietário do datashare com as permissões necessárias nos objetos de datashare a serem adicionados ou removidos pode alterar o datashare. Para ter mais informações, consulte ALTER DATASHARE.

Como administrador de produtores, quando você solta um datashare, ele deixa de ser listado em clusters de consumidores. Os bancos de dados e referências de esquema criados no cluster de consumidor a partir do datashare descartado continuam a existir sem objetos neles. O administrador do cluster de consumidores precisa excluir esses bancos de dados manualmente.

No lado do consumidor, um administrador do cluster consumidor pode determinar quais usuários e grupos devem ter acesso aos dados compartilhados criando um banco de dados da unidade de compartilhamento de dados. Dependendo das opções escolhidas ao criar o banco de dados, você pode controlar o acesso a ele da maneira a seguir. Para obter mais informações sobre como criar um banco de dados a partir de uma unidade de compartilhamento de dados, consulte CREATE DATABASE.

Consulte mais informações sobre como configurar uma unidade de compartilhamento de dados e ler dados de um consumidor em Compartilhar o acesso de leitura aos dados em uma Conta da AWS.

Criação do bancos de dados sem a cláusula WITH PERMISSIONS

Um administrador pode controlar o acesso no nível do banco de dados ou do esquema. Para controlar o acesso no nível do esquema, o administrador deve criar um esquema externo a partir do banco de dados do Amazon Redshift criado com base na unidade de compartilhamento de dados.

O exemplo a seguir concede permissões para acessar uma tabela compartilhada no nível de banco de dados e no nível de esquema.

GRANT USAGE ON DATABASE sales_db TO Bob; CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE sales_db SCHEMA 'public'; GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;

Para restringir ainda mais o acesso, você pode criar exibições sobre objetos compartilhados, expondo apenas os dados necessários. Você pode acabar usando essas exibições para dar acesso aos usuários e às funções.

Depois que os usuários tiverem acesso ao banco de dados ou esquema, eles terão acesso a todos os objetos compartilhados nesse banco de dados ou esquema.

Criação do bancos de dados com a cláusula WITH PERMISSIONS

Depois de conceder direitos de uso no banco de dados ou no esquema, um administrador poderá controlar ainda mais o acesso usando o mesmo processo de concessão da permissão que usaria em um banco de dados ou esquema local. Sem permissões de objeto individual, os usuários não podem acessar nenhum objeto no banco de dados compartilhado ou no esquema, mesmo depois de receberem a permissão USAGE.

O exemplo a seguir concede permissões para ter acesso a uma tabela compartilhada no nível do banco de dados.

GRANT USAGE ON DATABASE sales_db TO Bob; GRANT USAGE FOR SCHEMAS IN DATABASE sales_db TO Bob; GRANT SELECT ON sales_db.public.tickit_sales_redshift TO Bob;

Depois que tiverem recebido acesso ao banco de dados ou ao esquema, os usuários continuarão precisando receber as permissões relevantes para qualquer objeto no banco de dados ou esquema que você queira que eles acessem.

Compartilhamento detalhado usando WITH PERMISSIONS

Habilitação de clusters ou grupos de trabalho de tecnologia sem servidor para consultar a unidade de compartilhamento de dados

Esta etapa pressupõe que a unidade de compartilhamento de dados tenha origem em outro cluster ou no namespace do Amazon Redshift Serverless na conta ou esteja vindo de outra conta e tenha sido associada ao namespace que você está usando.

  1. O administrador do banco de dados consumidor pode criar um banco de dados a partir da unidade de compartilhamento de dados.

    CREATE DATABASE my_ds_db [WITH PERMISSIONS] FROM DATASHARE my_datashare OF NAMESPACE 'abc123def';

    Se criar um banco de dados WITH PERMISSIONS, você poderá conceder permissões granulares em objetos da unidades de compartilhamento de dados para usuários e funções diferentes. Sem isso, todos os usuários e funções com permissão USAGE no banco de dados da unidade de compartilhamento de dados recebem todas as permissões em todos os objetos dentro do banco de dados da unidade de compartilhamento de dados.

  2. Aqui está como conceder permissões a um usuário ou função do banco de dados do Redshift. Você deve ter uma conexão com um banco de dados local para executar essas instruções: Você não poderá executar essas instruções se executar um comando USE no banco de dados da unidade de compartilhamento de dados antes de executar as instruções de concessão.

    GRANT USAGE ON DATABASE my_ds_db TO ROLE data_eng; GRANT CREATE, USAGE ON SCHEMA my_ds_db.my_shared_schema TO ROLE data_eng; GRANT ALL ON ALL TABLES IN SCHEMA my_ds_db.my_shared_schema TO ROLE data_eng; GRANT USAGE ON DATABASE my_ds_db TO bi_user; GRANT USAGE ON SCHEMA my_ds_db.my_shared_schema TO bi_user; GRANT SELECT ON my_ds_db.my_shared_schema.table1 TO bi_user;

Trabalhar com visualizações no compartilhamento de dados do Amazon Redshift

Um cluster de produtores pode compartilhar visualizações regulares, de vinculação tardia e materializadas. Ao compartilhar visualizações regulares ou de vinculação tardia, você não precisa compartilhar as tabelas base. A tabela a seguir mostra como as visualizações são compatíveis com o compartilhamento de dados.

Exibir nome Essa visualização pode ser adicionada a um datashare? Um consumidor pode criar essa exibição em objetos do datashare entre clusters?
Visualização regular Sim Não
Visualização de vinculação tardia Sim Sim
Visualização materializada Sim Sim, mas somente com uma atualização completa

A consulta a seguir mostra a saída de uma visualização regular que é aceita com compartilhamento de dados. Para obter informações sobre a definição de visualização regular, consulte CREATE VIEW.

SELECT * FROM tickit_db.public.myevent_regular_vw ORDER BY eventid LIMIT 5; eventid | eventname ----------+------------- 3835 | LeAnn Rimes 3967 | LeAnn Rimes 4856 | LeAnn Rimes 4948 | LeAnn Rimes 5131 | LeAnn Rimes

A consulta a seguir mostra a saída de uma visualização de vinculação tardia que é compatível com compartilhamento de dados. Para obter mais informações sobre a definição de visualização de vinculação tardia, consulte CREATE VIEW.

SELECT * FROM tickit_db.public.event_lbv ORDER BY eventid LIMIT 5; eventid | venueid | catid | dateid | eventname | starttime --------+---------+-------+--------+------------------------------+--------------------- 1 | 305 | 8 | 1851 | Gotterdammerung | 2008-01-25 14:30:00 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00 3 | 302 | 8 | 1935 | Salome | 2008-04-19 14:30:00 4 | 309 | 8 | 2090 | La Cenerentola (Cinderella) | 2008-09-21 14:30:00 5 | 302 | 8 | 1982 | Il Trovatore | 2008-06-05 19:00:00

A consulta a seguir mostra a saída de uma visualização materializada que é aceita com o compartilhamento de dados. Para obter mais informações sobre a definição de visualização materializada, consulte CREATE MATERIALIZED VIEW.

SELECT * FROM tickit_db.public.tickets_mv; catgroup | qtysold ----------+--------- Concerts | 195444 Shows | 149905

Você pode manter tabelas comuns em todos os locatários em um cluster de produtores. Você também pode compartilhar subconjuntos de dados filtrados por colunas de dimensão, como tenant_id (account_id ou namespace_id), para clusters de consumidores. Para fazer isso, você pode definir uma exibição na tabela base com um filtro nessas colunas de ID, por exemplo current_aws_account = tenant_id. No lado do consumidor, quando você consulta a exibição, você verá apenas as linhas que se qualificam para sua conta. Para fazer isso, você pode usar as funções de contexto do Amazon Redshift current_aws_account e current_namespace.

A consulta a seguir retorna o ID da conta em que reside o cluster atual do Amazon Redshift. Você pode executar essa consulta se estiver conectado ao Amazon Redshift.

select current_user, current_aws_account; current_user | current_aws_account -------------+-------------------- dwuser | 111111111111 (1row)

A consulta a seguir retorna o namespace do atual cluster do Amazon Redshift. Você pode executar essa consulta se estiver conectado ao banco de dados.

select current_user, current_namespace; current_user | current_namespace -------------+-------------------------------------- dwuser | 86b5169f-01dc-4a6f-9fbb-e2e24359e9a8 (1 row)

Atualização incremental para visões materializadas em uma unidade de compartilhamento de dados

O Amazon Redshift oferece suporte à atualização incremental para visões materializadas em uma unidade de compartilhamento de dados do consumidor quando as tabelas base são compartilhadas. A atualização incremental é uma operação em que o Amazon Redshift identifica alterações em uma ou mais tabelas base que ocorreram após a atualização anterior e atualiza somente os registros correspondentes na visão materializada. Para obter mais informações sobre este comportamento, consulte CREATE MATERIALIZED VIEW.

Gerenciar o acesso a operações de API de compartilhamento de dados com políticas do IAM

Para controlar o acesso às operações de API de compartilhamento de dados, use políticas baseadas em ações do IAM. Para obter mais informações sobre como gerenciar políticas do IAM, consulte Gerenciar políticas do IAM no Manual do usuário do IAM.

Para obter informações sobre as permissões necessárias para usar as operações de API de compartilhamento de dados, consulte “Permissões necessárias para usar as operações de API de compartilhamento de dados” no Guia de gerenciamento de clusters do Amazon Redshift.

Para tornar o compartilhamento de dados entre contas mais seguro, você pode usar uma chave condicional ConsumerIdentifier para as operações de API AuthorizeDataShare e DeauthorizeDataShare. Com isso, é possível controlar explicitamente quais Contas da AWS poderão fazer chamadas para as duas operações de API.

Você pode negar a autorização ou desautorização do compartilhamento de dados para qualquer consumidor que não seja sua própria conta. Para isso, especifique o número da Conta da AWS na política do IAM.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "redshift:AuthorizeDataShare", "redshift:DeauthorizeDataShare" ], "Resource": "*", "Condition": { "StringNotEquals": { "redshift:ConsumerIdentifier": "555555555555" } } } ] }

Você pode permitir que um produtor com um DataShareArn testshare2 compartilhe explicitamente com um consumidor que tem uma Conta da AWS de 111122223333 na política do IAM.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "redshift:AuthorizeDataShare", "redshift:DeauthorizeDataShare" ], "Resource": "arn:aws:redshift:us-east-1:666666666666:datashare:af06285e-8a45-4ee9-b598-648c218c8ff1/testshare2", "Condition": { "StringEquals": { "redshift:ConsumerIdentifier": "111122223333" } } } ] }

Consulta a unidades de compartilhamento de dados

Acessar dados compartilhados no Amazon Redshift

Você pode descobrir dados compartilhados usando interfaces SQL padrão, drivers JDBC ou ODBC e a API de dados. Você também pode consultar dados com alta performance a partir de Business Intelligence (BI) e ferramentas analíticas familiares. Você pode executar consultas consultando os objetos de outros bancos de dados do Amazon Redshift que são locais e remotos do cluster aos quais você tem permissões de acesso.

Você pode fazer isso simplesmente permanecendo conectado aos bancos de dados locais em seu cluster. Em seguida, crie bancos de dados de consumidor de compartilhamentos de dados para consumir dados compartilhados.

Depois disso, você pode se conectar com o banco de dados do consumidor e consultar os objetos compartilhados usando a notação parcial. Ou você pode se conectar a um banco de dados do cluster local e consultar objetos em bancos de dados do consumidor usando a notação de três partes (consumer_database_name.schema_name.table_name). Também é possível consultar usando links de esquema externos para esquemas no banco de dados do consumidor. Você pode consultar dados locais e dados compartilhados de outros clusters dentro da mesma consulta. Essa consulta pode referenciar objetos do banco de dados conectado atual e de outros bancos de dados não conectados, inclusive bancos de dados de consumidores criados com base em unidades de compartilhamento de dados.

Acessar metadados para unidades de compartilhamento de dados no Amazon Redshift

Para ajudar os administradores de cluster a descobrir datashares, o Amazon Redshift fornece um conjunto de visualizações de metadados para listar os datashares. Essas exibições listam unidades de compartilhamento de dados criadas em seu cluster e também aquelas recebidas de outros clusters na mesma conta, de outras contas e de outras regiões da AWS. Essas visualizações exibem as seguintes informações:

  • Datashaers que são compartilhados e recebidos pelos clusters

  • Conteúdo de objetos de banco de dados nos datashares, incluindo os metadados básicos de compartilhamento, objetos e consumidores

Use SHOW SCHEMAS para visualizar uma lista dos esquemas compartilhados na unidade de compartilhamento de dados associada ao banco de dados conectado. Para ter mais informações, consulte SHOW SCHEMAS.

Use SHOW TABLES para visualizar uma lista das tabelas em um esquema compartilhado na unidade de compartilhamento de dados associada ao banco de dados conectado. Para ter mais informações, consulte SHOW TABLES.

Use SHOW COLUMNS para visualizar uma lista das coluna em uma tabela compartilhada na unidade de compartilhamento de dados associada ao banco de dados conectado. Para ter mais informações, consulte SHOW COLUMNS.

Use SVV_DATASHARES para visualizar uma lista de todos os datashares criados em seu cluster (de saída) e compartilhados de outros (de entrada). Para obter mais informações, consulte SVV_DATASHARES.

Use SVV_DATAASHARE_SUMERS para visualizar uma lista de consumidores de dados. Para obter mais informações, consulte SVV_DATASHARE_CONSUMERS.

Use SVV_DATAASHARE_OBJECTS para visualizar uma lista de objetos em todos os conjuntos de dados criados em seu cluster (de saída) e compartilhados de outros (de entrada). Para ter mais informações, consulte SVV_DATASHARE_OBJECTS.

Integração do compartilhamento de dados do Amazon Redshift com ferramentas de business intelligence

Para integrar o compartilhamento de dados com ferramentas de business intelligence (BI), recomendamos que você use os drivers JDBC ou ODBC do Amazon Redshift.

Drivers JDBC e ODBC do Amazon Redshift oferecem suporte à operação da API GetCatalogs nos drivers, que retorna a lista de todos os bancos de dados, incluindo aqueles criados a partir de datashares. Os drivers também suportam operações a jusante, como GetSchemas, GetTables, e assim por diante, que retornam dados de todos os bancos de dados que o GetCatalogs retorna. Os drivers fornecem esse suporte mesmo quando o catálogo não é explicitamente especificado na chamada. Para obter mais informações sobre drivers JDBC ou ODBC, consulte “Configurar conexões no Amazon Redshift” no Guia de gerenciamento de clusters do Amazon Redshift.

Você pode se conectar a bancos de dados de consumidor criados diretamente das unidades de compartilhamento de dados da mesma maneira que se conecta a qualquer outro banco de dados. Se você tiver uma interface de usuário de comutação de conexão em sua ferramenta, a lista de bancos de dados deve incluir os bancos de dados criados por meio de unidades de compartilhamento de dados. É possível descobrir esses bancos de dados de consumidor usando SVV_REDSHIFT_DATABASES.