연합 쿼리 사용 예 - Amazon Redshift

연합 쿼리 사용 예

다음 예에서는 연합 쿼리를 실행하는 방법을 보여줍니다. Amazon Redshift 데이터베이스에 연결된 SQL 클라이언트를 사용하여 SQL을 실행합니다.

PostgreSQL에서 연합 쿼리를 사용하는 예

다음 예에서는 Amazon Redshift 데이터베이스, Aurora PostgreSQL 데이터베이스 및 Amazon S3를 참조하는 연합 쿼리를 설정하는 방법을 보여줍니다. 이 예에서는 연합 쿼리의 작동 방식을 보여줍니다. 사용자 환경에서 실행하려면 사용자 환경에 맞게 변경합니다. 이 작업을 수행하기 위한 사전 조건은 PostgreSQL에 대한 연합 쿼리 사용 시작하기 단원을 참조하세요.

Aurora PostgreSQL 데이터베이스를 참조하는 외부 스키마를 생성합니다.

CREATE EXTERNAL SCHEMA apg FROM POSTGRES DATABASE 'database-1' SCHEMA 'myschema' URI 'endpoint to aurora hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-SecretsManager-RO' SECRET_ARN 'arn:aws:secretsmanager:us-west-2:123456789012:secret:federation/test/dataplane-apg-creds-YbVKQw';

Amazon S3를 참조하고 Amazon Redshift Spectrum을 사용하는 다른 외부 스키마를 생성합니다. 또한 public에 스키마를 사용할 수 있는 권한을 부여합니다.

CREATE EXTERNAL SCHEMA s3 FROM DATA CATALOG DATABASE 'default' REGION 'us-west-2' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-S3'; GRANT USAGE ON SCHEMA s3 TO public;

Amazon Redshift 테이블의 행 수를 표시합니다.

SELECT count(*) FROM public.lineitem; count ---------- 25075099

Aurora PostgreSQL 테이블의 행 수를 표시합니다.

SELECT count(*) FROM apg.lineitem; count ------- 11760

Amazon S3의 행 수를 표시합니다.

SELECT count(*) FROM s3.lineitem_1t_part; count ------------ 6144008876

Amazon Redshift, Aurora PostgreSQL 및 Amazon S3에서 테이블의 뷰를 생성합니다. 이 보기는 연합 쿼리를 실행하는 데 사용됩니다.

CREATE VIEW lineitem_all AS SELECT l_orderkey,l_partkey,l_suppkey,l_linenumber,l_quantity,l_extendedprice,l_discount,l_tax,l_returnflag,l_linestatus, l_shipdate::date,l_commitdate::date,l_receiptdate::date, l_shipinstruct ,l_shipmode,l_comment FROM s3.lineitem_1t_part UNION ALL SELECT * FROM public.lineitem UNION ALL SELECT * FROM apg.lineitem with no schema binding;

결과를 제한하는 술어와 함께 lineitem_all 보기의 행 수를 표시합니다.

SELECT count(*) from lineitem_all WHERE l_quantity = 10; count ----------- 123373836

매년 1월의 특정 항목에 대한 판매량을 알아봅니다.

SELECT extract(year from l_shipdate) as year, extract(month from l_shipdate) as month, count(*) as orders FROM lineitem_all WHERE extract(month from l_shipdate) = 1 AND l_quantity < 2 GROUP BY 1,2 ORDER BY 1,2; year | month | orders ------+-------+--------- 1992 | 1 | 196019 1993 | 1 | 1582034 1994 | 1 | 1583181 1995 | 1 | 1583919 1996 | 1 | 1583622 1997 | 1 | 1586541 1998 | 1 | 1583198 2016 | 1 | 15542 2017 | 1 | 15414 2018 | 1 | 15527 2019 | 1 | 151

대/소문자가 혼합된 이름을 사용하는 예

대/소문자가 혼합된 데이터베이스, 스키마, 테이블 또는 열 이름이 있는 지원되는 PostgreSQL 원격 데이터베이스를 쿼리하려면 enable_case_sensitive_identifiertrue로 설정합니다. 이 세션 파라미터에 대한 자세한 내용은 enable_case_sensitive_identifier 섹션을 참조하세요.

SET enable_case_sensitive_identifier TO TRUE;

일반적으로 데이터베이스 및 스키마 이름은 소문자입니다. 다음 예에서는 데이터베이스 및 스키마 이름이 소문자이고 테이블 및 열 이름이 대/소문자가 혼합된 지원되는 PostgreSQL 원격 데이터베이스에 연결하는 방법을 보여줍니다.

소문자 데이터베이스 이름(dblower)과 소문자 스키마 이름(schemalower)이 있는 Aurora PostgreSQL 데이터베이스를 참조하는 외부 스키마를 생성합니다.

CREATE EXTERNAL SCHEMA apg_lower FROM POSTGRES DATABASE 'dblower' SCHEMA 'schemalower' URI 'endpoint to aurora hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-SecretsManager-RO' SECRET_ARN 'arn:aws:secretsmanager:us-west-2:123456789012:secret:federation/test/dataplane-apg-creds-YbVKQw';

쿼리가 실행되는 세션에서 enable_case_sensitive_identifiertrue로 설정합니다.

SET enable_case_sensitive_identifier TO TRUE;

연합 쿼리를 실행하여 PostgreSQL 데이터베이스의 모든 데이터를 선택합니다. 테이블(MixedCaseTab)과 열(MixedCaseName)에 대/소문자가 혼합된 이름이 있습니다. 결과는 하나의 행(Harry)입니다.

select * from apg_lower."MixedCaseTab";
MixedCaseName ------- Harry

다음 예에서는 대/소문자가 혼합된 데이터베이스, 스키마, 테이블 및 열 이름이 있는 지원되는 PostgreSQL 원격 데이터베이스에 연결하는 방법을 보여줍니다.

외부 스키마를 생성하기 전에 enable_case_sensitive_identifiertrue로 설정합니다. 외부 스키마를 생성하기 전에 enable_case_sensitive_identifiertrue로 설정하지 않으면 데이터베이스가 존재하지 않는다는 오류가 발생합니다.

대/소문자가 혼합된 데이터베이스 이름(UpperDB)과 스키마 이름(UpperSchema)이 있는 Aurora PostgreSQL 데이터베이스를 참조하는 외부 스키마를 생성합니다.

CREATE EXTERNAL SCHEMA apg_upper FROM POSTGRES DATABASE 'UpperDB' SCHEMA 'UpperSchema' URI 'endpoint to aurora hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-SecretsManager-RO' SECRET_ARN 'arn:aws:secretsmanager:us-west-2:123456789012:secret:federation/test/dataplane-apg-creds-YbVKQw';

연합 쿼리를 실행하여 PostgreSQL 데이터베이스의 모든 데이터를 선택합니다. 테이블(MixedCaseTab)과 열(MixedCaseName)에 대/소문자가 혼합된 이름이 있습니다. 결과는 하나의 행(Harry)입니다.

select * from apg_upper."MixedCaseTab";
MixedCaseName ------- Harry

MySQL에서 연합 쿼리를 사용하는 예

다음 예에서는 Aurora MySQL 데이터베이스를 참조하는 연합 쿼리를 설정하는 방법을 보여줍니다. 이 예제에서는 연합 쿼리의 작동 방식을 보여 줍니다. 사용자 환경에서 실행하려면 사용자 환경에 맞게 변경합니다. 이 작업을 수행하기 위한 사전 조건은 MySQL에 대한 연합 쿼리 사용 시작하기 단원을 참조하세요.

이 예는 다음 사전 조건에 따라 다릅니다.

  • Aurora MySQL 데이터베이스에 대해 Secrets Manager에서 설정한 보안 암호입니다. 이 보안 암호는 IAM 액세스 정책 및 역할에서 참조됩니다. 자세한 내용은 연합 쿼리 사용을 위해 비밀 및 IAM 역할 생성 단원을 참조하십시오.

  • Amazon Redshift와 Aurora MySQL을 연결하도록 설정된 보안 그룹입니다.

Aurora MySQL 데이터베이스를 참조하는 외부 스키마를 생성합니다.

CREATE EXTERNAL SCHEMA amysql FROM MYSQL DATABASE 'functional' URI 'endpoint to remote hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-SecretsManager-RO' SECRET_ARN 'arn:aws:secretsmanager:us-west-2:123456789012:secret:federation/test/dataplane-apg-creds-YbVKQw';

Aurora MySQL 테이블의 예제 SQL 선택을 실행하여 Aurora MySQL의 직원 테이블에서 한 행을 표시합니다.

SELECT level FROM amysql.employees LIMIT 1; level ------- 8