クロスデータベースクエリの例
このトピックには、クロスデータベースクエリを使用する方法の例が含まれています。クロスデータベースクエリは、単一の Amazon Redshift クラスター内の複数のデータベースで動作するクエリです。
次の例を使用して、Amazon Redshift データベースを参照するクロスデータベースクエリの設定方法をご覧ください。
まず、Amazon Redshift クラスターにデータベース db1
と db2
およびユーザー user1
と user2
を作成します。詳細については、CREATE DATABASEおよびCREATE USERを参照してください。
--As user1 on db1
CREATE DATABASE db1;
CREATE DATABASE db2;
CREATE USER user1 PASSWORD 'Redshift01';
CREATE USER user2 PASSWORD 'Redshift01';
db1
の user1
として、テーブルを作成し、user2
にアクセス権限を付与し、table1
に値を挿入します。詳細については、GRANTおよび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);
db2
の user2
として、3 つの部分からなる表記を使用して db2
でデータベース間でクエリを実行します。
--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)
user2
の
として、外部スキーマを作成し、外部スキーマ表記を使用して db2
db2
でデータベース間でクエリを実行します。
--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)
さまざまなビューを作成し、それらのビューに許可を付与するには、db1
の user1
のように、次の手順を実行します。
--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;
db2
の user2
として、3 つの部分からなる表記を使用して、次のデータベース間でクエリを実行し、特定のビューを表示します。
--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)
db2
の user2
として、外部スキーマ表記を使用して次のデータベース間でクエリを実行し、遅延バインディングビューをクエリします。
--As user2 on db2
SELECT * FROM db1_public_sch.late_bind_view;
c3
----
3
6
9
(3 rows)
db2
の user2
として、単一のクエリで接続されたテーブルを使用して次のコマンドを実行します。
--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)
次の例では、クラスター上のすべてのデータベースを一覧表示します。
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)
次の例では、クラスター上のすべてのデータベースのすべての Amazon Redshift スキーマを一覧表示します。
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)
次の例では、クラスター上のすべての Amazon Redshift テーブルまたはすべてのデータベースのビューを一覧表示します。
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)
次の例では、クラスター上のすべてのデータベースのすべての Amazon Redshift と外部スキーマを一覧表示します。
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)
次の例では、クラスター上のすべてのデータベースのすべての Amazon Redshift と外部テーブルを一覧表示します。
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)