Exemplo de uso de uma consulta federada - Amazon Redshift

Exemplo de uso de uma consulta federada

Os exemplos a seguir mostram como executar uma consulta federada. Execute o SQL usando o cliente SQL conectado ao banco de dados do Amazon Redshift.

Exemplo de uso de uma consulta federada no PostgreSQL

O exemplo a seguir mostra como configurar uma consulta federada que faz referência a um banco de dados do Amazon Redshift, um banco de dados do Aurora PostgreSQL e Amazon S3. Este exemplo ilustra o funcionamento das consultas federadas. Para executá-lo em seu próprio ambiente, altere-o para se adequar ao ambiente. Para obter os pré-requisitos para fazer isso, consulte Conceitos básicos do uso de consultas federadas no PostgreSQL.

Crie um esquema externo que faça referência a um banco de dados do Aurora PostgreSQL.

CREATE EXTERNAL SCHEMA apg FROM POSTGRES DATABASE 'database-1' SCHEMA 'myschema' URI 'endpoint to aurora hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-SecretsManager-RO' SECRET_ARN 'arn:aws:secretsmanager:us-west-2:123456789012:secret:federation/test/dataplane-apg-creds-YbVKQw';

Crie outro esquema externo que faça referência ao Amazon S3, que usa o Amazon Redshift Spectrum. Além disso, conceda permissão para usar o esquema no modo public.

CREATE EXTERNAL SCHEMA s3 FROM DATA CATALOG DATABASE 'default' REGION 'us-west-2' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-S3'; GRANT USAGE ON SCHEMA s3 TO public;

Mostra a contagem de linhas na tabela do Amazon Redshift.

SELECT count(*) FROM public.lineitem; count ---------- 25075099

Mostra a contagem de linhas na tabela do Aurora PostgreSQL.

SELECT count(*) FROM apg.lineitem; count ------- 11760

Mostra a contagem de linhas no Amazon S3.

SELECT count(*) FROM s3.lineitem_1t_part; count ------------ 6144008876

Crie uma visualização das tabelas do Amazon Redshift, do Aurora PostgreSQL e do Amazon S3. Essa visualização será usada para executar a consulta federada.

CREATE VIEW lineitem_all AS SELECT l_orderkey,l_partkey,l_suppkey,l_linenumber,l_quantity,l_extendedprice,l_discount,l_tax,l_returnflag,l_linestatus, l_shipdate::date,l_commitdate::date,l_receiptdate::date, l_shipinstruct ,l_shipmode,l_comment FROM s3.lineitem_1t_part UNION ALL SELECT * FROM public.lineitem UNION ALL SELECT * FROM apg.lineitem with no schema binding;

Mostrar a contagem de linhas na visualização lineitem_all com um predicado para limitar os resultados.

SELECT count(*) from lineitem_all WHERE l_quantity = 10; count ----------- 123373836

Descubra quantas vezes um item vendeu em janeiro de cada ano.

SELECT extract(year from l_shipdate) as year, extract(month from l_shipdate) as month, count(*) as orders FROM lineitem_all WHERE extract(month from l_shipdate) = 1 AND l_quantity < 2 GROUP BY 1,2 ORDER BY 1,2; year | month | orders ------+-------+--------- 1992 | 1 | 196019 1993 | 1 | 1582034 1994 | 1 | 1583181 1995 | 1 | 1583919 1996 | 1 | 1583622 1997 | 1 | 1586541 1998 | 1 | 1583198 2016 | 1 | 15542 2017 | 1 | 15414 2018 | 1 | 15527 2019 | 1 | 151

Exemplo de uso de um nome com maiúsculas e minúsculas

Para consultar um banco de dados remoto PostgreSQL suportado que tenha um nome com maiúsculas e minúsculas de um banco de dados, esquema, tabela ou coluna, defina enable_case_sensitive_identifier como true. Para obter mais informações sobre este parâmetro de sessão, consulte enable_case_sensitive_identifier.

SET enable_case_sensitive_identifier TO TRUE;

Normalmente, os nomes do banco de dados e do esquema estão em minúsculas. O exemplo a seguir mostra como você pode se conectar a um banco de dados remoto PostgreSQL suportado que tenha nomes minúsculos para banco de dados e esquema e nomes com maiúsculas e minúsculas para tabela e coluna.

Crie um esquema externo que faça referência a um banco de dados do Aurora PostgreSQL que tenha um nome do banco de dados minúsculas (dblower) e nome do esquema em minúsculas (schemalower).

CREATE EXTERNAL SCHEMA apg_lower FROM POSTGRES DATABASE 'dblower' SCHEMA 'schemalower' URI 'endpoint to aurora hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-SecretsManager-RO' SECRET_ARN 'arn:aws:secretsmanager:us-west-2:123456789012:secret:federation/test/dataplane-apg-creds-YbVKQw';

Na sessão em que a consulta é executada, defina enable_case_sensitive_identifier como true.

SET enable_case_sensitive_identifier TO TRUE;

Execute uma consulta federada para selecionar todos os dados do banco de dados do PostgreSQL. A tabela (MixedCaseTab) e coluna (MixedCaseName) têm nomes com maiúsculas e minúsculas. O resultado é uma linha (Harry).

select * from apg_lower."MixedCaseTab";
MixedCaseName ------- Harry

O exemplo a seguir mostra como você pode se conectar a um banco de dados remoto PostgreSQL compatível com um nome com maiúsculas e minúsculas para o banco de dados, esquema, tabela e coluna.

Defina enable_case_sensitive_identifier como true antes de criar o esquema externo. Se enable_case_sensitive_identifier não está definido como true antes de criar o esquema externo, ocorre um erro de banco de dados inexistente.

Crie um esquema externo que faça referência a um banco de dados Aurora PostgreSQL que tenha um banco de dados com maiúsculas e minúsculas (UpperDB) e um nome de esquema (UpperSchema).

CREATE EXTERNAL SCHEMA apg_upper FROM POSTGRES DATABASE 'UpperDB' SCHEMA 'UpperSchema' URI 'endpoint to aurora hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-SecretsManager-RO' SECRET_ARN 'arn:aws:secretsmanager:us-west-2:123456789012:secret:federation/test/dataplane-apg-creds-YbVKQw';

Execute uma consulta federada para selecionar todos os dados do banco de dados do PostgreSQL. A tabela (MixedCaseTab) e coluna (MixedCaseName) têm nomes com maiúsculas e minúsculas. O resultado é uma linha (Harry).

select * from apg_upper."MixedCaseTab";
MixedCaseName ------- Harry

Exemplo de uso de uma consulta federada com MySQL

O exemplo a seguir mostra como configurar uma consulta federada que faz referência a um banco de dados do Aurora MySQL. Este exemplo ilustra como o funcionamento das consultas federadas. Para executá-lo em seu próprio ambiente, altere-o para se adequar ao ambiente. Para obter os pré-requisitos para fazer isso, consulte Conceitos básicos do uso de consultas federadas no MySQL.

Este exemplo depende dos seguintes pré-requisitos:

  • Um segredo que foi configurado no Secrets Manager para o banco de dados do MySQL do Aurora. Este segredo é referenciado nas políticas e funções de acesso do IAM. Para obter mais informações, consulte Criar um segredo e uma função do IAM para usar consultas federadas.

  • Um grupo de segurança configurado para vincular o Amazon Redshift e o Aurora MySQL.

Crie um esquema externo que faça referência a um banco de dados do Aurora MySQL.

CREATE EXTERNAL SCHEMA amysql FROM MYSQL DATABASE 'functional' URI 'endpoint to remote hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-SecretsManager-RO' SECRET_ARN 'arn:aws:secretsmanager:us-west-2:123456789012:secret:federation/test/dataplane-apg-creds-YbVKQw';

Execute um exemplo de seleção SQL da tabela do Aurora MySQL para exibir uma linha da tabela de funcionários no Aurora MySQL.

SELECT level FROM amysql.employees LIMIT 1; level ------- 8