Amazon Redshift Spectrum용 외부 스키마 생성 - Amazon Redshift

Amazon Redshift Spectrum용 외부 스키마 생성

모든 외부 테이블은 CREATE EXTERNAL SCHEMA 문을 사용하여 생성하는 외부 스키마에서 만들어야 합니다.

참고

몇몇 애플리케이션은 데이터베이스라는 용어와 스키마라는 용어를 구분하지 않고 사용합니다. Amazon Redshift에서는 스키마라는 용어를 사용합니다.

Amazon Redshift 외부 스키마는 외부 데이터 카탈로그에 있는 외부 데이터베이스를 참조합니다. 외부 데이터베이스는 Amazon Redshift, Amazon Athena, AWS Glue Data Catalog 또는 Amazon EMR 같은 Apache Hive 메타스토어에서 생성할 수 있습니다. Amazon Redshift에서 생성되는 외부 데이터베이스는 Athena Data Catalog에 상주합니다. Hive 메타스토어에서 데이터베이스를 만들려면 Hive 애플리케이션에서 데이터베이스를 생성해야 합니다.

Amazon Redshift가 사용자를 대신하여 Athena에 있는 Data Catalog와 Amazon S3에 있는 데이터 파일에 액세스하려면 권한 부여가 필요합니다. 이러한 권한을 부여하려면 먼저 IAM(AWS Identity and Access Management) 역할을 생성해야 합니다. 그런 다음 역할을 클러스터에 연결하고 Amazon Redshift CREATE EXTERNAL SCHEMA 문에서 역할의 Amazon 리소스 이름(ARN)을 제공해야 합니다. 권한 부여에 대한 자세한 내용은 Amazon Redshift Spectrum에 대한 IAM 정책 섹션을 참조하세요.

참고

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

외부 스키마를 생성하는 동시에 외부 데이터베이스를 생성하려면 FROM DATA CATALOG를 지정하고 CREATE EXTERNAL DATABASE 문에 CREATE EXTERNAL SCHEMA 절을 포함시킵니다.

다음 예에서는 외부 데이터베이스 spectrum_schema를 사용하여 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;

Athena를 사용하여 Data Catalog를 관리하는 경우 Athena 데이터베이스 이름 및 Athena Data Catalog가 위치하는 AWS 리전을 지정합니다.

다음 예에서는 Athena Data Catalog에서 기본 sampledb 데이터베이스를 사용해 외부 스키마를 생성합니다.

create external schema athena_schema from data catalog database 'sampledb' iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole' region 'us-east-2';
참고

region 파라미터는 Amazon S3의 데이터 파일 위치가 아니라 Athena Data Catalog가 위치한 AWS 리전을 참조합니다.

Amazon EMR과 같은 Hive 메타스토어를 사용하여 데이터 카탈로그를 관리하는 경우 보안 그룹이 클러스터 사이의 트래픽을 허용하도록 구성되어야 합니다.

CREATE EXTERNAL SCHEMA 문에서 FROM HIVE METASTORE를 지정하고 메타스토어의 URI와 포트 번호를 추가합니다. 다음 예에서는 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'

클러스터의 외부 스키마를 보려면 PG_EXTERNAL_SCHEMA 카탈로그 테이블 또는 SVV_EXTERNAL_SCHEMAS 뷰를 쿼리하십시오. 다음 예는 PG_EXTERNAL_SCHEMA와 PG_NAMESPACE를 조인하는 SVV_EXTERNAL_SCHEMAS를 쿼리합니다.

select * from svv_external_schemas

전체 명령 구문과 예는 CREATE EXTERNAL SCHEMA 섹션을 참조하세요.

Amazon Redshift Spectrum의 외부 카탈로그 작업

Amazon Redshift Spectrum 외부 데이터베이스 및 외부 테이블을 위한 메타데이터는 외부 데이터 카탈로그에 저장됩니다. 기본적으로 Redshift Spectrum 메타데이터는 Athena Data Catalog에 저장됩니다. Athena 콘솔에서 Redshift Spectrum 데이터베이스와 테이블을 보고 관리할 수 있습니다.

Athena 또는 Amazon EMR 등의 Hive 메타스토어를 통해 Hive DDL(데이터 정의 언어) 명령을 사용하여 외부 데이터베이스와 외부 테이블을 생성하고 관리할 수도 있습니다.

참고

Amazon Redshift를 사용하여 Redshift Spectrum에서 외부 데이터베이스와 외부 테이블을 생성하고 관리하는 것이 좋습니다.

Athena와 AWS Glue에서 Redshift Spectrum 데이터베이스 보기

CREATE EXTERNAL SCHEMA 문에 CREATE EXTERNAL DATABASE IF NOT EXISTS 절을 포함하여 외부 데이터베이스를 생성할 수 있습니다. 이 경우 외부 데이터베이스 메타데이터가 데이터 카탈로그에 저장됩니다. 외부 스키마에 의해 정규화되어 생성한 외부 테이블의 메타데이터도 데이터 카탈로그에 저장됩니다.

Athena와 AWS Glue는 지원되는 각각의 AWS 리전마다 데이터 카탈로그를 유지합니다. 테이블 메타데이터를 보려면 Athena 또는 AWS Glue 콘솔에 로그인합니다. Athena에서 Data sources(데이터 소스), 즉 사용자의 AWS Glue를 선택한 후 데이터베이스의 세부 정보를 봅니다. AWS Glue에서 Databases(데이터베이스), 즉 사용자의 외부 데이터베이스를 선택한 후 데이터베이스의 세부 정보를 봅니다.

Athena를 사용하여 외부 테이블을 생성하고 관리하는 경우 CREATE EXTERNAL SCHEMA를 사용하여 데이터베이스를 등록합니다. 예를 들어 다음 명령은 sampledb라는 Athena 데이터베이스를 등록합니다.

create external schema athena_sample from data catalog database 'sampledb' iam_role 'arn:aws:iam::123456789012:role/mySpectrumRole' region 'us-east-1';

SVV_EXTERNAL_TABLES 시스템 뷰를 쿼리하면 Athena sampledb 데이터베이스에 있는 테이블뿐 아니라 Amazon Redshift에서 생성한 테이블도 볼 수 있습니다.

select * from svv_external_tables;
schemaname    | tablename        | location                                               
--------------+------------------+--------------------------------------------------------
athena_sample | elb_logs         | s3://athena-examples/elb/plaintext           
athena_sample | lineitem_1t_csv  | s3://myspectrum/tpch/1000/lineitem_csv                
athena_sample | lineitem_1t_part | s3://myspectrum/tpch/1000/lineitem_partition          
spectrum      | sales            | s3://redshift-downloads/tickit/spectrum/sales          
spectrum      | sales_part       | s3://redshift-downloads/tickit/spectrum/sales_part

Apache Hive 메타스토어 데이터베이스 등록

Apache Hive 메타스토어에서 외부 테이블을 생성하는 경우, CREATE EXTERNAL SCHEMA를 사용하여 이 테이블을 Redshift Spectrum에 등록할 수 있습니다.

CREATE EXTERNAL SCHEMA 문에서 FROM HIVE METASTORE 절을 지정하고 Hive 메타스토어 URI와 포트 번호를 제공합니다. IAM 역할에 Amazon S3에 대한 액세스 권한이 포함되어야 하지만 Athena 권한은 필요하지 않습니다. 다음 예는 Hive 메타스토어를 등록합니다.

create external schema if not exists hive_schema from hive metastore database 'hive_database' uri 'ip-10-0-111-111.us-west-2.compute.internal' port 9083 iam_role 'arn:aws:iam::123456789012:role/mySpectrumRole';

Amazon Redshift 클러스터에 Amazon EMR 클러스터에 대한 액세스 권한 부여

Hive 메타스토어가 Amazon EMR에 있는 경우 Amazon EMR 클러스터에 Amazon Redshift 클러스터에 대한 액세스 권한을 부여해야 합니다. 이렇게 하려면 Amazon EC2 보안 그룹을 생성합니다. 그런 다음 Amazon Redshift 클러스터 보안 그룹과 Amazon EMR 클러스터 보안 그룹에서 EC2 보안 그룹으로의 모든 인바운드 트래픽을 허용합니다. 그런 다음 Amazon Redshift 클러스터와 Amazon EMR 클러스터에 EC2 보안을 추가합니다.

Amazon Redshift 클러스터의 보안 그룹 이름 보기

보안 그룹을 표시하려면 다음을 수행합니다.

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/redshiftv2/에서 Amazon Redshift 콘솔을 엽니다.

  2. 탐색 메뉴에서 클러스터(Clusters)를 선택한 후 목록에서 클러스터를 선택하여 세부 정보를 엽니다.

  3. 속성(Properties)을 선택하고 네트워크 및 보안 설정(Network and security settings) 섹션을 봅니다.

  4. VPC 보안 그룹(VPC security group)에서 보안 그룹을 찾아 기록해 둡니다.

Amazon EMR 마스터 노드 보안 그룹 이름 보기
  1. Amazon EMR 클러스터를 엽니다. 자세한 내용은 Amazon EMR 관리 가이드보안 구성을 사용하여 클러스터 보안 설정을 참조하세요.

  2. 보안 및 액세스(Security and access)에서 Amazon EMR 마스터 노드 보안 그룹 이름을 기록해 둡니다.

    Amazon EMR 콘솔에서 Amazon EMR 프라이머리 노드 보안 그룹 이름이 강조 표시된 스크린샷.
Amazon Redshift와 Amazon EMR 간의 연결을 허용하도록 Amazon EC2 보안 그룹을 생성하거나 수정하려면
  1. Amazon EC2 대시보드에서 보안 그룹(Security groups)을 선택합니다. 자세한 내용은 Amazon EC2 사용 설명서의 보안 그룹 규칙을 참조하세요.

  2. 보안 그룹 생성(Create security group)을 선택합니다.

  3. VPC를 사용하는 경우 Amazon Redshift 클러스터와 Amazon EMR 클러스터가 있는 VPC를 선택합니다.

  4. 인바운드 규칙을 추가합니다.

    1. 유형에 대해 사용자 지정 TCP를 선택합니다.

    2. 소스(Source)에서 사용자 지정(Custom)을 선택합니다.

    3. Amazon Redshift 보안 그룹의 이름을 입력합니다.

  5. 다른 인바운드 규칙을 추가합니다.

    1. 유형에서 TCP를 선택합니다.

    2. 포트 범위9083을 입력합니다.

      참고

      EMR HMS의 기본 포트는 9083입니다. HMS가 다른 포트를 사용하는 경우에는 인바운드 규칙과 외부 스키마 정의에 따라 해당 포트를 지정하십시오.

    3. 소스(Source)에서 사용자 지정(Custom)을 선택합니다.

  6. 보안 그룹 이름과 설명을 입력합니다.

  7. 보안 그룹 생성을 선택합니다.

이전 절차에서 생성한 Amazon EC2 보안 그룹을 Amazon Redshift 클러스터에 추가하려면
  1. Amazon Redshift에서 클러스터를 선택합니다.

  2. 속성을 선택합니다.

  3. 네트워크 및 보안 설정(Network and security settings)을 보고 편집(Edit)을 선택합니다.

  4. VPC 보안 그룹(VPC security group)에서 새 보안 그룹 이름을 선택합니다.

  5. Save changes(변경 사항 저장)를 선택합니다.

Amazon EMR 클러스터에 Amazon EC2 보안 그룹을 추가하려면
  1. Amazon EMR에서 클러스터를 선택합니다. 자세한 내용은 Amazon EMR 관리 가이드보안 구성을 사용하여 클러스터 보안 설정을 참조하세요.

  2. 하드웨어에서 마스터 노드의 링크를 선택합니다.

  3. EC2 인스턴스 ID(EC2 instance ID) 열에서 링크를 선택합니다.

    Amazon EMR 콘솔에서 Amazon EC2 인스턴스 ID 값이 강조 표시된 스크린샷.
  4. 작업(Actions)에서 보안(Security), 보안 그룹 변경(Change security groups)을 선택합니다.

  5. 연결된 보안 그룹(Associated sercurity groups)에서 새 보안 그룹을 선택하고 보안 그룹 추가(Add security group)를 선택합니다.

  6. Save(저장)를 선택합니다.