Amazon Redshift는 2026년 6월 30일 이후에 Python UDF 사용을 더 이상 지원하지 않습니다. 해당 조치는 단계적으로 시행될 예정입니다. Python 수명 종료 및 마이그레이션 옵션에 대한 자세한 내용은 2025년 6월 30일에 게시된 블로그 게시물
사용 노트
이 주제에는 CREATE EXTERNAL TABLE에 대한 사용 참고 사항이 포함되어 있습니다. PG_TABLE_DEF, STV_TBL_PERM, PG_CLASS 또는 information_schema와 같은 표준 Amazon Redshift 테이블에 사용하는 것과 동일한 리소스를 사용하여 Amazon Redshift Spectrum 테이블에 대한 세부 정보를 볼 수 없습니다. 비즈니스 인텔리전스 또는 분석 도구가 Redshift Spectrum 외부 테이블을 인식하지 못하는 경우 애플리케이션이 SVV_EXTERNAL_TABLES 및 SVV_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
Iceberg v3 테이블의 경우 2개의 추가 가상 열 _row_id 및 _last_updated_sequence_number를 사용할 수 있습니다. 자세한 내용은 행 계보 섹션을 참조하세요.
데이터 처리 옵션 설정
테이블 파라미터를 설정하여 외부 테이블에서 쿼리되는 다음을 비롯한 데이터의 입력 처리를 지정할 수 있습니다.
-
VARCHAR, CHAR 및 문자열 데이터를 포함하는 열의 잉여 문자. 자세한 내용은 외부 테이블 속성
surplus_char_handling섹션을 참조하세요. -
VARCHAR, CHAR 및 문자열 데이터를 포함하는 열의 잘못된 문자. 자세한 내용은 외부 테이블 속성
invalid_char_handling섹션을 참조하세요. -
외부 테이블 속성
invalid_char_handling에 REPLACE를 지정하는 경우 사용할 대체 문자. -
정수 및 십진수 데이터가 포함된 열에서 캐스트 오버플로우 처리 자세한 내용은 외부 테이블 속성
numeric_overflow_handling섹션을 참조하세요. -
Surplus_bytes_handling은 varbyte 데이터를 포함하는 열의 잉여 바이트에 대한 입력 처리를 지정합니다. 자세한 내용은 외부 테이블 속성
surplus_bytes_handling섹션을 참조하세요.