Exemplos de consulta entre bancos de dados - Amazon Redshift

Exemplos de consulta entre bancos de dados

Este tópico contém exemplos sobre como usar consultas entre bancos de dados. As consultas entre bancos de dados são consultas que operam em vários bancos de dados em um único cluster do Amazon Redshift.

Use os exemplos a seguir para ajudar a saber como configurar uma consulta entre bancos de dados que faça referência a um banco de dados do Amazon Redshift.

Para iniciar, crie os bancos de dados db1 e db2 e também os usuários user1 e user2 no cluster do Amazon Redshift. Para ter mais informações, consulte CREATE DATABASE e CRIAR USUÁRIO.

--As user1 on db1 CREATE DATABASE db1; CREATE DATABASE db2; CREATE USER user1 PASSWORD 'Redshift01'; CREATE USER user2 PASSWORD 'Redshift01';

Como user1 no db1, crie uma tabela, conceda privilégios de acesso ao user2 e insira valores em table1. Para ter mais informações, consulte GRANT e INSERT.

--As user1 on db1 CREATE TABLE table1 (c1 int, c2 int, c3 int); GRANT SELECT ON table1 TO user2; INSERT INTO table1 VALUES (1,2,3),(4,5,6),(7,8,9);

Como user2 no db2, execute uma consulta entre bancos de dados no db2 usando a notação de três partes.

--As user2 on db2 SELECT * from db1.public.table1 ORDER BY c1; c1 | c2 | c3 ---+-----+---- 1 | 2 | 3 4 | 5 | 6 7 | 8 | 9 (3 rows)

Como user2 no db2, crie um esquema externo e execute uma consulta entre bancos de dados no db2 usando a notação do esquema externo.

--As user2 on db2 CREATE EXTERNAL SCHEMA db1_public_sch FROM REDSHIFT DATABASE 'db1' SCHEMA 'public'; SELECT * FROM db1_public_sch.table1 ORDER BY c1; c1 | c2 | c3 ----+----+---- 1 | 2 | 3 4 | 5 | 6 7 | 8 | 9 (3 rows)

Para criar exibições diferentes e conceder permissões a essas exibições, como user1 no db1, faça como a seguir.

--As user1 on db1 CREATE VIEW regular_view AS SELECT c1 FROM table1; GRANT SELECT ON regular_view TO user2; CREATE MATERIALIZED VIEW mat_view AS SELECT c2 FROM table1; GRANT SELECT ON mat_view TO user2; CREATE VIEW late_bind_view AS SELECT c3 FROM public.table1 WITH NO SCHEMA BINDING; GRANT SELECT ON late_bind_view TO user2;

Como user2 no db2, execute a consulta de banco de dados a seguir usando a notação de três partes para exibir o modo de exibição específico.

--As user2 on db2 SELECT * FROM db1.public.regular_view; c1 ---- 1 4 7 (3 rows) SELECT * FROM db1.public.mat_view; c2 ---- 8 5 2 (3 rows) SELECT * FROM db1.public.late_bind_view; c3 ---- 3 6 9 (3 rows)

Como user2 no db2, execute a seguinte consulta entre bancos de dados usando a notação de esquema externo para consultar a visualização de vinculação tardia.

--As user2 on db2 SELECT * FROM db1_public_sch.late_bind_view; c3 ---- 3 6 9 (3 rows)

Como user2 no db2, execute o comando a seguir usando tabelas conectadas em uma única consulta.

--As user2 on db2 CREATE TABLE table1 (a int, b int, c int); INSERT INTO table1 VALUES (1,2,3), (4,5,6), (7,8,9); SELECT a AS col_1, (db1.public.table1.c2 + b) AS sum_col2, (db1.public.table1.c3 + c) AS sum_col3 FROM db1.public.table1, table1 WHERE db1.public.table1.c1 = a; col_1 | sum_col2 | sum_col3 ------+----------+---------- 1 | 4 | 6 4 | 10 | 12 7 | 16 | 18 (3 rows)

O exemplo a seguir lista todos os bancos de dados do no cluster.

select database_name, database_owner, database_type from svv_redshift_databases where database_name in ('db1', 'db2'); database_name | database_owner | database_type ---------------+----------------+--------------- db1 | 100 | local db2 | 100 | local (2 rows)

O exemplo a seguir lista todos os esquemas do Amazon Redshift de todos os bancos de dados no cluster.

select database_name, schema_name, schema_owner, schema_type from svv_redshift_schemas where database_name in ('db1', 'db2'); database_name | schema_name | schema_owner | schema_type ---------------+--------------------+--------------+------------- db1 | pg_catalog | 1 | local db1 | public | 1 | local db1 | information_schema | 1 | local db2 | pg_catalog | 1 | local db2 | public | 1 | local db2 | information_schema | 1 | local (6 rows)

O exemplo a seguir lista todas as tabelas ou exibições do Amazon Redshift de todos os bancos de dados no cluster.

select database_name, schema_name, table_name, table_type from svv_redshift_tables where database_name in ('db1', 'db2') and schema_name in ('public'); database_name | schema_name | table_name | table_type ---------------+-------------+---------------------+------------ db1 | public | late_bind_view | VIEW db1 | public | mat_view | VIEW db1 | public | mv_tbl__mat_view__0 | TABLE db1 | public | regular_view | VIEW db1 | public | table1 | TABLE db2 | public | table2 | TABLE (6 rows)

O exemplo a seguir lista todos os esquemas do Amazon Redshift e externos de todos os bancos de dados no cluster.

select database_name, schema_name, schema_owner, schema_type from svv_all_schemas where database_name in ('db1', 'db2') ; database_name | schema_name | schema_owner | schema_type ---------------+--------------------+--------------+------------- db1 | pg_catalog | 1 | local db1 | public | 1 | local db1 | information_schema | 1 | local db2 | pg_catalog | 1 | local db2 | public | 1 | local db2 | information_schema | 1 | local db2 | db1_public_sch | 1 | external (7 rows)

O exemplo a seguir lista todos os Amazon Redshift e tabelas externas de todos os bancos de dados no cluster.

select database_name, schema_name, table_name, table_type from svv_all_tables where database_name in ('db1', 'db2') and schema_name in ('public'); database_name | schema_name | table_name | table_type ---------------+-------------+---------------------+------------ db1 | public | regular_view | VIEW db1 | public | mv_tbl__mat_view__0 | TABLE db1 | public | mat_view | VIEW db1 | public | late_bind_view | VIEW db1 | public | table1 | TABLE db2 | public | table2 | TABLE (6 rows)