CREATE EXTERNAL SCHEMA - Amazon Redshift

CREATE EXTERNAL SCHEMA

현재 데이터베이스에서 새 외부 스키마를 생성합니다. 이 외부 스키마를 사용하여 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL 호환 버전 데이터베이스에 연결할 수 있습니다. 또한 AWS Glue, Athena와 같은 외부 데이터 카탈로그의 데이터베이스 또는 Amazon EMR과 같은 Apache Hive 메타스토어의 데이터베이스를 참조하는 외부 스키마를 생성할 수 있습니다.

이 스키마의 소유자는 CREATE EXTERNAL SCHEMA 명령의 발행자입니다. 외부 스키마의 소유권을 이전하려면 ALTER SCHEMA를 사용해 소유자를 변경합니다. 다른 사용자 또는 사용자 그룹에 스키마에 대한 액세스를 허용하려면 GRANT 명령을 사용합니다.

외부 테이블에서 권한에 대한 GRANT 또는 REVOKE 명령을 사용할 수 없습니다. 대신에, 외부 스키마에 대한 권한을 허용하거나 취소합니다.

참고

현재 Amazon Athena 데이터 카탈로그에 Redshift Spectrum 외부 테이블이 있다면 Athena 데이터 카탈로그를 AWS Glue Data Catalog로 마이그레이션할 수 있습니다. AWS Glue Data Catalog를 Redshift Spectrum과 함께 사용하려면 AWS Identity and Access Management(IAM) 정책을 변경해야 할 수 있습니다. 자세한 내용은 Athena User GuideUpgrading to the AWS Glue Data Catalog 섹션을 참조하세요.

외부 스키마에 대한 세부 정보를 보려면 SVV_EXTERNAL_SCHEMAS 시스템 뷰를 쿼리하십시오.

구문

다음 구문은 외부 데이터 카탈로그를 사용하여 데이터를 참조하는 데 사용되는 CREATE EXTERNAL SCHEMA 명령에 대해 설명합니다. 자세한 내용은 Amazon Redshift Spectrum을 사용하여 외부 데이터 쿼리 단원을 참조하십시오.

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM { [ DATA CATALOG ] | HIVE METASTORE | POSTGRES | MYSQL | KINESIS | MSK | REDSHIFT }
[ DATABASE 'database_name' ]
[ SCHEMA 'schema_name' ]
[ REGION 'aws-region' ]
[ URI 'hive_metastore_uri' [ PORT port_number ] ]
IAM_ROLE { default | 'SESSION' | 'arn:aws:iam::<AWS 계정-id>:role/<role-name>' }
[ SECRET_ARN 'ssm-secret-arn' ]
[ AUTHENTICATION { none | iam } ]
[ CLUSTER_ARN 'arn:aws:kafka:<region>:<AWS 계정-id>:cluster/msk/<cluster uuid>' ]
[ CATALOG_ROLE { 'SESSION' | 'catalog-role-arn-string' } ]
[ CREATE EXTERNAL DATABASE IF NOT EXISTS ]
[ CATALOG_ID 'Amazon Web Services account ID containing Glue or Lake Formation database' ]

다음 구문은 RDS POSTGRES 또는 Aurora PostgreSQL에 대한 연합 쿼리로 데이터를 참조하는 데 사용되는 CREATE EXTERNAL SCHEMA 명령을 설명합니다. Kinesis Data Streams와 같은 스트리밍 소스를 참조하는 외부 스키마를 생성할 수도 있습니다. 자세한 내용은 Amazon Redshift에서 연합 쿼리를 사용하여 데이터 쿼리 단원을 참조하십시오.

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM POSTGRES
DATABASE 'federated_database_name' [SCHEMA 'schema_name']
URI 'hostname' [ PORT port_number ]
IAM_ROLE { default | 'arn:aws:iam::<AWS 계정-id>:role/<role-name>' }
SECRET_ARN 'ssm-secret-arn'

다음 구문은 RDS MySQL 또는 Aurora MySQL에 대한 연합 쿼리로 데이터를 참조하는 데 사용되는 CREATE EXTERNAL SCHEMA 명령을 설명합니다. 자세한 내용은 Amazon Redshift에서 연합 쿼리를 사용하여 데이터 쿼리 단원을 참조하십시오.

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM MYSQL
DATABASE 'federated_database_name'
URI 'hostname' [ PORT port_number ]
IAM_ROLE { default | 'arn:aws:iam::<AWS 계정-id>:role/<role-name>' }
SECRET_ARN 'ssm-secret-arn'

다음 구문은 Kinesis 스트림 데이터를 참조하는 데 사용되는 CREATE EXTERNAL SCHEMA 명령에 대해 설명합니다. 자세한 내용은 스트리밍 수집 단원을 참조하십시오.

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM KINESIS
IAM_ROLE { default | 'arn:aws:iam::<AWS 계정-id>:role/<role-name>' }

다음 구문은 Amazon Managed Streaming for Apache Kafka 클러스터와 해당 수집 대상 주제를 참조하는 데 사용되는 CREATE EXTERNAL SCHEMA 명령을 설명합니다. CLUSTER_ARN은 데이터를 읽고 있는 Amazon MSK 클러스터를 지정합니다. 자세한 내용은 스트리밍 수집 단원을 참조하십시오.

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM MSK
IAM_ROLE { default | 'arn:aws:iam::<AWS 계정-id>:role/<role-name>' }
AUTHENTICATION { none | iam }
CLUSTER_ARN 'msk-cluster-arn';

다음 구문은 데이터베이스 간 쿼리로 데이터를 참조하는 데 사용되는 CREATE EXTERNAL SCHEMA 명령을 설명합니다.

CREATE EXTERNAL SCHEMA local_schema_name
FROM  REDSHIFT
DATABASE 'redshift_database_name' SCHEMA 'redshift_schema_name'

파라미터

IF NOT EXISTS

지정된 스키마가 이미 존재하는 경우 오류 메시지와 함께 종료하는 대신, 명령이 아무 것도 변경하지 않고 스키마가 존재한다는 메시지를 반환함을 나타내는 절입니다. 이 절은 스크립트 작성 시 유용하므로, CREATE EXTERNAL SCHEMA가 이미 존재하는 스키마의 생성을 시도하는 경우에는 스크립트가 실패하지 않습니다.

local_schema_name

새 외부 스키마의 이름입니다. 유효한 이름에 대한 자세한 내용은 이름 및 식별자 섹션을 참조하세요.

FROM [ DATA CATALOG ] | HIVE METASTORE | POSTGRES | MYSQL | KINESIS | MSK | REDSHIFT

외부 데이터베이스가 있는 위치를 나타내는 키워드입니다.

DATA CATALOG는 외부 데이터베이스가 Athena 데이터 카탈로그 또는 AWS Glue Data Catalog에 정의되어 있음을 나타냅니다.

외부 데이터베이스가 다양한 AWS 리전에서 외부 Data Catalog에 정의되어 있는 경우 REGION 파라미터가 필요합니다. DATA CATALOG는 기본값입니다.

HIVE METASTORE는 외부 데이터베이스가 Apache Hive 메타스토어에 정의되어 있음을 나타냅니다. HIVE METASTORE가 지정되는 경우 URI가 필요합니다.

POSTGRES는 외부 데이터베이스가 RDS PostgreSQL 또는 Aurora PostgreSQL에 정의되어 있음을 나타냅니다.

MYSQL은 외부 데이터베이스가 RDS MySQL 또는 Aurora MySQL에 정의되어 있음을 나타냅니다.

KINESIS는 데이터 원본이 Kinesis Data Streams의 스트림임을 나타냅니다.

MSK는 데이터 소스가 Amazon MSK의 주제임을 나타냅니다.

FROM REDSHIFT

데이터베이스가 Amazon Redshift에 있음을 나타내는 키워드입니다.

DATABASE 'redshift_database_name' SCHEMA 'redshift_schema_name'

Amazon Redshift 데이터베이스의 이름입니다.

redshift_schema_name은 Amazon Redshift의 스키마를 나타냅니다. 기본 redshift_schema_namepublic입니다.

DATABASE 'federated_database_name'

키워드는 지원되는 PostgreSQL 또는 MySQL 데이터베이스 엔진에서 외부 데이터베이스의 이름을 나타냅니다.

[SCHEMA 'schema_name']

schema_name은 지원되는 PostgreSQL 데이터베이스 엔진의 스키마를 나타냅니다. 기본 schema_namepublic입니다.

지원되는 MySQL 데이터베이스 엔진에 대한 연합 쿼리를 설정할 때 SCHEMA를 지정할 수 없습니다.

REGION 'aws-region'

외부 데이터베이스가 Athena 데이터 카탈로그 또는 AWS Glue Data Catalog에 정의되어 있는 경우 데이터베이스가 있는 AWS 리전입니다. 이 파라미터는 데이터베이스가 외부 Data Catalog에 정의되어 있는 경우에 필요합니다.

URI 'hive_metastore_uri' [ PORT port_number ]

지원되는 PostgreSQL 또는 MySQL 데이터베이스 엔진의 호스트 이름 URI와 port_number입니다. hostname은 복제본 세트의 헤드 노드입니다. 엔드포인트는 Amazon Redshift 클러스터에서 연결(라우팅)할 수 있어야 합니다. 기본 PostgreSQL 포트 번호는 5432입니다. 기본 MySQL 포트 번호는 3306입니다.

데이터베이스가 Hive 메타스토어에 있는 경우 메타스토어의 URI를 지정하고 선택적으로 포트 번호를 지정합니다. 기본 포트 번호는 9083입니다.

URI에는 프로토콜 사양("http://")이 포함되어 있지 않습니다. 유효한 URI의 예: uri '172.10.10.10'.

참고

지원되는 PostgreSQL 또는 MySQL 데이터베이스 엔진은 Amazon Redshift 클러스터와 동일한 VPC에 있어야 합니다. Amazon Redshift와 RDS PostgreSQL 또는 Aurora PostgreSQL을 연결하는 보안 그룹을 생성합니다.

IAM_ROLE { default | 'SESSION' | 'arn:aws:iam::<AWS 계정-id>:role/<role-name>' }

기본 키워드를 사용하여 CREATE EXTERNAL SCHEMA 명령이 실행될 때 Amazon Redshift에서 기본값으로 설정되고 클러스터와 연결된 IAM 역할을 사용하도록 합니다.

페더레이션형 ID를 사용하여 Amazon Redshift 클러스터에 연결하고 이 명령을 사용하여 생성된 외부 스키마에서 테이블에 액세스하는 경우에 'SESSION'을 사용합니다. 자세한 내용은 페더레이션형 ID 구성 방법이 설명된 페더레이션형 ID를 사용하여 로컬 리소스 및 Amazon Redshift Spectrum 외부 테이블에 대한 Amazon Redshift 액세스 관리 섹션을 참조하세요. ARN 대신 'SESSION'을 사용하는 이 구성은 DATA CATALOG를 사용하여 스키마를 생성한 경우에만 사용할 수 있다는 점에 유의하세요.

클러스터가 인증 및 권한 부여에 사용하는 IAM 역할의 Amazon 리소스 이름(ARN)을 사용합니다. 최소 IAM 역할은 액세스되는 Amazon S3 버킷에서 LIST 작업을 수행하고 버킷에 포함된 Amazon S3 객체에 대한 GET 작업을 수행할 수 있는 권한이 있어야 합니다.

다음은 단일 ARN에 대한 IAM_ROLE 파라미터의 구문을 보여줍니다.

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'

역할을 함께 묶어 클러스터가 다른 계정에 속한 다른 IAM 역할을 수임하도록 할 수 있습니다. 최대 10개의 역할을 함께 묶을 수 있습니다. 역할 연쇄의 예는 Amazon Redshift Spectrum에서 IAM 역할 연결를 참조하세요.

이 IAM 역할에 다음과 유사한 IAM 권한 정책을 연결합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccessSecret", "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword", "secretsmanager:ListSecrets" ], "Resource": "*" } ] }

연합 쿼리에 사용할 IAM 역할을 생성하는 단계는 연합 쿼리 사용을 위해 비밀 및 IAM 역할 생성 섹션을 참조하세요.

참고

연결된 역할 목록에 공백을 포함하지 마십시오.

다음은 세 역할을 함께 묶기 위한 구문을 나타낸 것입니다.

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
SECRET_ARN 'ssm-secret-arn'

AWS Secrets Manager를 사용하여 생성한 지원되는 PostgreSQL 또는 MySQL 데이터베이스 엔진 암호의 Amazon 리소스 이름(ARN)입니다. 보안 암호에 대한 ARN을 생성하고 가져오는 방법에 대한 자세한 내용은 AWS Secrets Manager User GuideCreating a Basic SecretRetrieving the Secret Value Secret 섹션을 참조하세요.

CATALOG_ROLE { 'SESSION' | catalog-role-arn-string}

'SESSION'은 데이터 카탈로그에 대한 인증 및 권한 부여를 위해 페더레이션형 ID를 사용하여 Amazon Redshift 클러스터에 연결하는 데 사용합니다. 페더레이션형 ID 단계를 완료하는 방법에 대한 자세한 내용은 페더레이션형 ID를 사용하여 로컬 리소스 및 Amazon Redshift Spectrum 외부 테이블에 대한 Amazon Redshift 액세스 관리를 참조하세요. 'SESSION' 역할은 스키마가 DATA CATALOG에서 생성된 경우에만 사용할 수 있다는 점에 유의하세요.

클러스터가 데이터 카탈로그에 대한 인증 및 권한 부여에 사용하는 IAM 역할의 Amazon 리소스 이름(ARN)을 사용합니다.

CATALOG_ROLE을 지정하지 않으면 Amazon Redshift는 지정된 IAM_ROLE을 사용합니다. 카탈로그 역할은 AWS Glue 또는 Athena에 있는 Data Catalog에 액세스할 수 있는 권한이 있어야 합니다. 자세한 내용은 Amazon Redshift Spectrum에 대한 IAM 정책 단원을 참조하십시오.

다음은 단일 ARN에 대한 CATALOG_ROLE 파라미터의 구문을 보여줍니다.

CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role>'

역할을 함께 묶어 클러스터가 다른 계정에 속한 다른 IAM 역할을 수임하도록 할 수 있습니다. 최대 10개의 역할을 함께 묶을 수 있습니다. 자세한 내용은 Amazon Redshift Spectrum에서 IAM 역할 연결 단원을 참조하십시오.

참고

함께 묶은 역할 목록에 공백을 포함하면 안 됩니다.

다음은 세 역할을 함께 묶기 위한 구문을 나타낸 것입니다.

CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role-1-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-2-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-3-name>'

CREATE EXTERNAL DATABASE IF NOT EXISTS

지정된 외부 데이터베이스가 존재하지 않는 경우 DATABASE 인수로 지정된 이름을 가진 외부 데이터베이스를 생성하는 절입니다. 지정된 외부 데이터베이스가 존재하는 경우 이 명령을 실행해도 아무런 변화가 없습니다. 이 경우에는 명령 실행 시 오류 메시지와 함께 종료되지 않고 외부 데이터베이스가 존재한다는 메시지가 반환됩니다.

참고

CREATE EXTERNAL DATABASE IF NOT EXISTS를 HIVE METASTORE와 함께 사용할 수 없습니다.

Data Catalog가 AWS Lake Formation에 사용되는 상태에서 CREATE EXTERNAL DATABASE IF NOT EXISTS를 사용하려면 Data Catalog에 대한 CREATE_DATABASE 권한이 필요합니다.

CATALOG_ID 'Glue 또는 Lake Formation 데이터베이스가 포함된 Amazon Web Services 계정 ID'

데이터 카탈로그 데이터베이스가 저장되는 계정 ID입니다.

CATALOG_ID는 다음 중 하나를 설정하여 데이터 카탈로그에 대한 인증 및 권한 부여를 위해 페더레이션형 ID를 사용하여 Amazon Redshift 클러스터 또는 Amazon Redshift Serverless에 연결하려는 경우에만 지정할 수 있습니다.

  • CATALOG_ROLE~'SESSION'

  • IAM_ROLE'SESSION'으로, 'CATALOG_ROLE'을 기본값으로 설정

페더레이션형 ID 단계를 완료하는 방법에 대한 자세한 내용은 페더레이션형 ID를 사용하여 로컬 리소스 및 Amazon Redshift Spectrum 외부 테이블에 대한 Amazon Redshift 액세스 관리를 참조하세요.

인증

스트리밍 수집에 대해 정의된 인증 유형입니다. 인증 유형이 있는 스트리밍 수집은 Amazon Managed Streaming for Apache Kafka와 함께 작동합니다. AUTHENTICATION 유형은 다음과 같습니다.

CLUSTER_ARN

스트리밍 수집의 경우, 스트리밍 출처인 Amazon Managed Streaming for Apache Kafka 클러스터의 클러스터 식별자입니다. 자세한 내용은 스트리밍 수집을 참조하세요.

사용 노트

Athena Data Catalog 사용 시 제한 사항은 AWS 일반 참조의 Athena 제한 사항을 참조하세요.

AWS Glue Data Catalog 사용 시 제한 사항은 AWS 일반 참조의 AWS Glue 제한 사항을 참조하세요.

Hive 메타스토어에는 이러한 제한이 적용되지 않습니다.

데이터베이스당 스키마 수는 최대 9,900개입니다. 자세한 내용은 Amazon Redshift 관리 가이드할당량 및 제한 섹션을 참조하세요.

스키마의 등록을 취소하려면 DROP SCHEMA 명령을 사용합니다.

외부 스키마에 대한 세부 정보를 보려면 다음 시스템 보기를 쿼리합니다.

다음 예에서는 미국 서부(오레곤)에서 sampledb로 명명된 데이터 카탈로그에 있는 데이터베이스를 사용하여 외부 스키마를 생성합니다. 이 예시를 Athena 또는 AWS Glue 데이터 카탈로그와 함께 사용하세요.

create external schema spectrum_schema from data catalog database 'sampledb' region 'us-west-2' iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole';

다음 예에서는 외부 스키마를 생성하고 spectrum_db로 명명된 새로운 외부 데이터베이스를 생성합니다.

create external schema spectrum_schema from data catalog database 'spectrum_db' iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole' create external database if not exists;

다음 예에서는 hive_db로 명명된 Hive 메타스토어 데이터베이스를 사용하여 외부 스키마를 생성합니다.

create external schema hive_schema from hive metastore database 'hive_db' uri '172.10.10.10' port 99 iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole';

다음 예에서는 Amazon S3 액세스에 myS3Role 역할을 사용하고 데이터 카탈로그 액세스에 myAthenaRole을 사용하기 위해 역할을 함께 묶습니다. 자세한 내용은 Amazon Redshift Spectrum에서 IAM 역할 연결 단원을 참조하십시오.

create external schema spectrum_schema from data catalog database 'spectrum_db' iam_role 'arn:aws:iam::123456789012:role/myRedshiftRole,arn:aws:iam::123456789012:role/myS3Role' catalog_role 'arn:aws:iam::123456789012:role/myAthenaRole' create external database if not exists;

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

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema FROM POSTGRES DATABASE 'my_aurora_db' SCHEMA 'my_aurora_schema' URI 'endpoint to aurora hostname' PORT 5432 IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole' SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'

다음 예에서는 소비자 클러스터에서 가져온 sales_db를 참조하는 외부 스키마를 생성합니다.

CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';

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

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema FROM MYSQL DATABASE 'my_aurora_db' URI 'endpoint to aurora hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole' SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'