Beispiele für die Verwendung einer datenbankübergreifenden Abfrage - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beispiele für die Verwendung einer datenbankübergreifenden Abfrage

Anhand der folgenden Beispiele erfahren Sie, wie Sie eine datenbankübergreifende Abfrage einrichten, die auf eine Amazon-Redshift-Datenbank verweist.

Erstellen Sie zum Starten die Datenbanken db1 und db2 sowie die Benutzer user1 und user2 in Ihrem Amazon-Redshift-Cluster. Weitere Informationen erhalten Sie unter CREATE DATABASE und CREATE USER.

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

Erstellen Sie als user1 in db1 eine Tabelle, erteilen Sie Zugriffsberechtigungen für user2 und fügen Sie Werte in table1 ein. Weitere Informationen erhalten Sie unter GRANT und 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);

Führen Sie als user2 in db2 eine datenbankübergreifende Abfrage in db2unter Verwendung der dreiteiligen Notation durch.

--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)

Erstellen Sie als user2 in db2 ein externes Schema und führen Sie eine datenbankübergreifende Abfrage in db2 unter Verwendung der externen Schemanotation durch.

--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)

Gehen Sie wie folgt vor, um als user1 in db1 verschiedene Ansichten zu erstellen und diesen Ansichten Berechtigungen zu erteilen.

--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;

Führen Sie als user2 in db2 die folgende datenbankübergreifende Abfrage mit der dreiteiligen Notation aus, um die bestimmte Ansicht anzuzeigen.

--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)

Führen Sie als user2 in db2 die folgende datenbankübergreifende Abfrage mithilfe der externen Schemanotation aus, um die späte Bindungsansicht abzufragen.

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

Führen Sie als user2 in db2 den folgenden Befehl aus, um verbundene Tabellen in einer einzelnen Abfrage zu verwenden.

--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)

Im folgenden Beispiel werden alle Datenbanken auf dem Cluster aufgelistet.

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)

Im folgenden Beispiel werden alle Amazon-Redshift-Schemas aller Datenbanken im Cluster aufgelistet.

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)

Im folgenden Beispiel werden alle Amazon-Redshift-Tabellen aller Datenbanken im Cluster aufgelistet.

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)

Im folgenden Beispiel werden alle Amazon-Redshift- und externen Schemas aller Datenbanken im Cluster aufgelistet.

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)

Im folgenden Beispiel werden alle Amazon-Redshift- und externen Tabellen aller Datenbanken im Cluster aufgelistet.

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)