데이터베이스 간 쿼리 사용 예 - Amazon Redshift

데이터베이스 간 쿼리 사용 예

다음 예를 사용하여 Amazon Redshift 데이터베이스를 참조하는 데이터베이스 간 쿼리를 설정하는 방법에 대해 알아봅니다.

시작하려면 Amazon Redshift 클러스터에서 데이터베이스 db1db2와 사용자 user1user2를 생성합니다. 자세한 내용은 데이터베이스 생성사용자 생성 섹션을 참조하세요.

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

db1user1과 같이 테이블을 생성하고 user2에게 액세스 권한을 부여하고 table1에 값을 삽입합니다. 자세한 내용은 GRANTINSERT 섹션을 참조하세요.

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

db2user2와 같이 세 부분으로 구성된 표기법을 사용하여 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)

db2user2와 같이 외부 스키마를 생성하고 외부 스키마 표기법을 사용하여 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)

다른 뷰를 생성하고 해당 뷰에 권한을 부여하려면 db1user1과 같이 다음을 수행합니다.

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

db2user2와 같이 세 부분으로 구성된 표기법으로 다음 데이터베이스 간 쿼리를 실행하여 특정 뷰를 봅니다.

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

db2user2와 같이 외부 스키마 표기법으로 다음 데이터베이스 간 쿼리를 실행하여 후기 바인딩 뷰를 쿼리합니다.

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

db2user2와 같이 단일 쿼리에서 연결된 테이블을 사용하여 다음 명령을 실행합니다.

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