사용 노트 - Amazon Redshift

사용 노트

이 주제에는 CREATE EXTERNAL TABLE에 대한 사용 참고 사항이 포함되어 있습니다. PG_TABLE_DEF, STV_TBL_PERM, PG_CLASS 또는 information_schema와 같은 표준 Amazon Redshift 테이블에 사용하는 것과 동일한 리소스를 사용하여 Amazon Redshift Spectrum 테이블에 대한 세부 정보를 볼 수 없습니다. 비즈니스 인텔리전스 또는 분석 도구가 Redshift Spectrum 외부 테이블을 인식하지 못하는 경우 애플리케이션이 SVV_EXTERNAL_TABLESSVV_EXTERNAL_COLUMNS를 쿼리하도록 구성합니다.

CREATE EXTERNAL TABLE AS

경우에 따라 AWS Glue Data Catalog, AWS Lake Formation 외부 카탈로그 또는 Apache Hive 메타스토어에 대해 CREATE EXTERNAL TABLE AS 명령을 실행할 수 있습니다. 이러한 경우 AWS Identity and Access Management(IAM) 역할을 사용하여 외부 스키마를 생성합니다. 이 IAM 역할에는 Amazon S3에 대한 읽기 및 쓰기 권한이 모두 있어야 합니다.

Lake Formation 카탈로그를 사용하는 경우 IAM 역할에 카탈로그에서 테이블을 생성할 수 있는 권한이 있어야 합니다. 이 경우 대상 Amazon S3 경로에 대한 데이터 레이크 위치 권한도 있어야 합니다. 이 IAM 역할은 새 AWS Lake Formation 테이블의 소유자가 됩니다.

파일 이름이 고유한지 확인하기 위해 Amazon Redshift에서는 기본적으로 Amazon S3에 업로드된 각 파일의 이름에 다음 형식을 사용합니다.

<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>.

예를 들면, 20200303_004509_810669_1007_0001_part_00.parquet입니다.

CREATE EXTERNAL TABLE AS 명령을 실행할 때 다음 사항을 고려하십시오.

  • Amazon S3 위치는 비어 있어야 합니다.

  • Amazon Redshift는 STORED AS 절을 사용할 때만 PARQUET 및 TEXTFILE 형식을 지원합니다.

  • 열 정의 목록을 정의할 필요가 없습니다. 새 외부 테이블의 열 이름과 열 데이터 형식은 SELECT 쿼리에서 직접 파생됩니다.

  • PARTITIONED BY 절에서 파티션 열의 데이터 형식을 정의할 필요가 없습니다. 파티션 키를 지정하는 경우 SELECT 쿼리 결과에 이 열의 이름이 있어야 합니다. 여러 파티션 열이 있는 경우 SELECT 쿼리의 순서는 중요하지 않습니다. Amazon Redshift는 PARTITIONED BY 절에 정의된 순서를 사용하여 외부 테이블을 생성합니다.

  • Amazon Redshift는 파티션 키 값에 따라 출력 파일을 파티션 폴더로 자동으로 분할합니다. 기본적으로 Amazon Redshift는 출력 파일에서 파티션 열을 제거합니다.

  • LINES TERMINATED BY 'delimiter' 절은 지원되지 않습니다.

  • ROW FORMAT SERDE 'serde_name' 절은 지원되지 않습니다.

  • 매니페스트 파일의 사용은 지원되지 않습니다. 따라서 Amazon S3에서 매니페스트 파일에 LOCATION 절을 정의할 수 없습니다.

  • Amazon Redshift는 명령 끝에서 'numRows' 테이블 속성을 자동으로 업데이트합니다.

  • 'compression_type' 테이블 속성은 PARQUET 파일 형식에 대해 'none' 또는 'snappy'만 사용할 수 있습니다.

  • Amazon Redshift는 외부 SELECT 쿼리에서 LIMIT 절을 허용하지 않습니다. 대신 중첩된 LIMIT 절을 사용할 수 있습니다.

  • STL_UNLOAD_LOG를 사용하여 각 CREATE EXTERNAL TABLE AS 작업에 의해 Amazon S3에 작성된 파일을 추적할 수 있습니다.

외부 테이블 생성 및 쿼리 권한

외부 테이블을 생성하려면 외부 스키마의 소유자 또는 수퍼유저인지 확인하십시오. 외부 스키마의 소유권을 이전하려면 ALTER SCHEMA를 사용합니다. 다음 예에서는spectrum_schema 스키마의 소유자를 newowner로 바꿉니다.

alter schema spectrum_schema owner to newowner;

Redshift Spectrum 쿼리를 실행하는 데 필요한 권한은 다음과 같습니다.

  • 스키마에 대한 사용 권한

  • 현재 데이터베이스에서 임시 테이블을 생성할 수 있는 권한

다음 예에서는 spectrum_schema 스키마에 대한 사용 권한을 spectrumusers 사용자 그룹에 부여합니다.

grant usage on schema spectrum_schema to group spectrumusers;

다음 예에서는 spectrumdb 데이터베이스에 대한 임시 권한을 spectrumusers 사용자 그룹에 부여합니다.

grant temp on database spectrumdb to group spectrumusers;

가상 열

기본적으로 Amazon Redshift에서는 가상 열 $path$size가 있는 외부 테이블을 생성합니다. 이러한 열을 선택하면 Amazon S3에 있는 데이터 파일의 경로와 쿼리에서 반환한 각 열에 대한 데이터 파일의 크기를 확인할 수 있습니다. $path$size 열 이름은 큰 따옴표로 구분해야 합니다. SELECT * 절은 가상 열을 반환하지 않습니다. 다음 예에서처럼 쿼리에 $path$size 열을 명시적으로 포함해야 합니다.

select "$path", "$size" from spectrum.sales_part where saledate = '2008-12-01';

spectrum_enable_pseudo_columns 구성 파라미터를 false로 설정하여 세션에 대해 가상 열 생성을 비활성화할 수 있습니다.

중요

$size 또는 $path를 선택하면 Redshift Spectrum이 Amazon S3의 데이터 파일을 스캔해 결과 집합의 크기를 결정하기 때문에 요금이 발생합니다. 자세한 내용은 Amazon Redshift Pricing(Amazon Redshift 요금) 섹션을 참조하세요.

데이터 처리 옵션 설정

테이블 파라미터를 설정하여 외부 테이블에서 쿼리되는 다음을 비롯한 데이터의 입력 처리를 지정할 수 있습니다.

  • VARCHAR, CHAR 및 문자열 데이터를 포함하는 열의 잉여 문자. 자세한 내용은 외부 테이블 속성 surplus_char_handling 섹션을 참조하세요.

  • VARCHAR, CHAR 및 문자열 데이터를 포함하는 열의 잘못된 문자. 자세한 내용은 외부 테이블 속성 invalid_char_handling 섹션을 참조하세요.

  • 외부 테이블 속성 invalid_char_handling에 REPLACE를 지정하는 경우 사용할 대체 문자.

  • 정수 및 십진수 데이터가 포함된 열에서 캐스트 오버플로우 처리 자세한 내용은 외부 테이블 속성 numeric_overflow_handling 섹션을 참조하세요.

  • Surplus_bytes_handling은 varbyte 데이터를 포함하는 열의 잉여 바이트에 대한 입력 처리를 지정합니다. 자세한 내용은 외부 테이블 속성 surplus_bytes_handling 섹션을 참조하세요.