Ejemplos de consultas entre bases de datos - Amazon Redshift

Ejemplos de consultas entre bases de datos

Este tema contiene ejemplos sobre cómo usar las consultas entre bases de datos. Las consultas entre bases de datos son consultas que funcionan en varias bases de datos dentro de un único clúster de Amazon Redshift.

Utilice los siguientes ejemplos para aprender a configurar una consulta entre bases de datos que haga referencia a una base de datos de Amazon Redshift.

Para comenzar, cree las bases de datos db1 y db2 y los usuarios user1 y user2 en el clúster de Amazon Redshift. Para obtener más información, consulte CREATE DATABASE y CREAR USUARIO.

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

Como user1 en db1, cree una tabla, conceda privilegios de acceso a user2 e inserte valores en table1. Para obtener más información, consulte GRANT y 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 en db2, ejecute una consulta entre bases de datos en db2 mediante la notación de tres 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 en db2, cree un esquema externo y ejecute una consulta entre bases de datos en db2 mediante la notación de 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 crear vistas diferentes y conceder permisos a esas vistas, como user1 en db1, haga lo siguiente.

--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 en db2, ejecute la siguiente consulta entre bases de datos mediante la notación de tres partes para visualizar la vista en particular.

--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 en db2, ejecute la siguiente consulta entre bases de datos mediante la notación de esquema externo para consultar la vista de enlace de tiempo de ejecución.

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

Como user2 en db2, ejecute el siguiente comando mediante tablas conectadas en una sola 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)

En el siguiente ejemplo, se muestran todas las bases de datos del clúster.

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)

En el siguiente ejemplo, se muestran todos los esquemas de Amazon Redshift de todas las bases de datos del clúster.

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)

En el siguiente ejemplo, se muestran todas las tablas o las vistas de Amazon Redshift de todas las bases de datos del clúster.

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)

En el siguiente ejemplo, se muestran todos los esquemas externos y de Amazon Redshift de todas las bases de datos del clúster.

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)

En el siguiente ejemplo, se muestran todas las tablas externas y de Amazon Redshift de todas las bases de datos del clúster.

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)