

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# 사용 노트
<a name="r_CREATE_EXTERNAL_TABLE_usage"></a>

이 주제에는 [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md)에 대한 사용 참고 사항이 포함되어 있습니다. [PG\$1TABLE\$1DEF](r_PG_TABLE_DEF.md), [STV\$1TBL\$1PERM](r_STV_TBL_PERM.md), PG\$1CLASS 또는 information\$1schema와 같은 표준 Amazon Redshift 테이블에 사용하는 것과 동일한 리소스를 사용하여 Amazon Redshift Spectrum 테이블에 대한 세부 정보를 볼 수 없습니다. 비즈니스 인텔리전스 또는 분석 도구가 Redshift Spectrum 외부 테이블을 인식하지 못하는 경우 애플리케이션이 [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md) 및 [SVV\$1EXTERNAL\$1COLUMNS](r_SVV_EXTERNAL_COLUMNS.md)를 쿼리하도록 구성합니다.

## CREATE EXTERNAL TABLE AS
<a name="r_CETAS"></a>

경우에 따라 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\$1name' 절은 지원되지 않습니다.
+ 매니페스트 파일의 사용은 지원되지 않습니다. 따라서 Amazon S3에서 매니페스트 파일에 LOCATION 절을 정의할 수 없습니다.
+ Amazon Redshift는 명령 끝에서 'numRows' 테이블 속성을 자동으로 업데이트합니다.
+ 'compression\$1type' 테이블 속성은 PARQUET 파일 형식에 대해 'none' 또는 'snappy'만 사용할 수 있습니다.
+ Amazon Redshift는 외부 SELECT 쿼리에서 LIMIT 절을 허용하지 않습니다. 대신 중첩된 LIMIT 절을 사용할 수 있습니다.
+ STL\$1UNLOAD\$1LOG를 사용하여 각 CREATE EXTERNAL TABLE AS 작업에 의해 Amazon S3에 작성된 파일을 추적할 수 있습니다.

## 외부 테이블 생성 및 쿼리 권한
<a name="r_CREATE_EXTERNAL_TABLE_usage-permissions"></a>

외부 테이블을 생성하려면 외부 스키마의 소유자 또는 수퍼유저인지 확인하세요. 외부 스키마의 소유권을 이전하려면 [ALTER SCHEMA](r_ALTER_SCHEMA.md)를 사용합니다. 다음 예에서는`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;
```

## 가상 열
<a name="r_CREATE_EXTERNAL_TABLE_usage-pseudocolumns"></a>

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

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

*spectrum\$1enable\$1pseudo\$1columns* 구성 파라미터를 *false*로 설정하여 세션에 대해 가상 열 생성을 비활성화할 수 있습니다.

**중요**  
*\$1size* 또는 *\$1path*를 선택하면 Redshift Spectrum이 Amazon S3의 데이터 파일을 스캔해 결과 집합의 크기를 결정하기 때문에 요금이 발생합니다. 자세한 내용은 [Amazon Redshift Pricing](https://aws.amazon.com/redshift/pricing/)(Amazon Redshift 요금) 섹션을 참조하세요.

## 데이터 처리 옵션 설정
<a name="r_CREATE_EXTERNAL_TABLE_usage-data-handling"></a>

테이블 파라미터를 설정하여 외부 테이블에서 쿼리되는 다음을 비롯한 데이터의 입력 처리를 지정할 수 있습니다.
+ VARCHAR, CHAR 및 문자열 데이터를 포함하는 열의 잉여 문자. 자세한 내용은 외부 테이블 속성 `surplus_char_handling` 섹션을 참조하세요.
+ VARCHAR, CHAR 및 문자열 데이터를 포함하는 열의 잘못된 문자. 자세한 내용은 외부 테이블 속성 `invalid_char_handling` 섹션을 참조하세요.
+ 외부 테이블 속성 `invalid_char_handling`에 REPLACE를 지정하는 경우 사용할 대체 문자.
+ 정수 및 십진수 데이터가 포함된 열에서 캐스트 오버플로우 처리 자세한 내용은 외부 테이블 속성 `numeric_overflow_handling` 섹션을 참조하세요.
+ Surplus\$1bytes\$1handling은 varbyte 데이터를 포함하는 열의 잉여 바이트에 대한 입력 처리를 지정합니다. 자세한 내용은 외부 테이블 속성 `surplus_bytes_handling` 섹션을 참조하세요.