

 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/)을 참조하세요.

# ALTER TABLE
ALTER TABLE

이 명령은 Amazon Redshift 테이블 또는 Amazon Redshift Spectrum 외부 테이블의 정의를 변경합니다. 이 명령은 [CREATE TABLE](r_CREATE_TABLE_NEW.md) 또는 [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md)에서 설정한 값과 속성을 업데이트합니다. 행 수준 보안(RLS)을 위해 뷰에서 ALTER TABLE을 사용할 수 있습니다.

트랜잭션 블록(BEGIN ... END) 내의 외부 테이블에서 ALTER TABLE을 실행할 수 없습니다. 버전 관리에 대한 자세한 내용은 [Amazon Redshift의 격리 수준](c_serial_isolation.md) 섹션을 참조하세요.

ALTER TABLE은 ALTER TABLE 작업 관련한 트랜잭션이 완료될 때까지 테이블 읽기 및 쓰기 을 잠금 설정합니다. 다만 변경하는 동안 테이블에서 데이터를 쿼리하거나 다른 작업을 수행할 수 있다고 설명서에 나와 있는 경우는 예외입니다.

## 필수 권한
필수 권한

명령이 성공하려면 테이블을 변경하는 사용자에게 적절한 권한이 있어야 합니다. ALTER TABLE 명령에 따라 다음 권한 중 하나가 필요합니다.
+ 수퍼유저
+ ALTER TABLE 권한이 있는 사용자
+ 스키마에 대한 USAGE 권한이 있는 테이블 소유자

## 구문
구문

```
ALTER TABLE table_name
{
ADD table_constraint
| DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ]
| OWNER TO new_owner
| RENAME TO new_name
| RENAME COLUMN column_name TO new_name
| ALTER COLUMN column_name TYPE updated_varchar_data_type_size
| ALTER COLUMN column_name ENCODE new_encode_type
| ALTER COLUMN column_name ENCODE encode_type,
| ALTER COLUMN column_name ENCODE encode_type, .....;
| ALTER DISTKEY column_name
| ALTER DISTSTYLE ALL
| ALTER DISTSTYLE EVEN
| ALTER DISTSTYLE KEY DISTKEY column_name
| ALTER DISTSTYLE AUTO
| ALTER [COMPOUND] SORTKEY ( column_name [,...] )
| ALTER SORTKEY AUTO
| ALTER SORTKEY NONE
| ALTER ENCODE AUTO
| ADD [ COLUMN ] column_name column_type
  [ DEFAULT default_expr ]
  [ ENCODE encoding ]
  [ NOT NULL | NULL ]
  [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ] |
| DROP [ COLUMN ] column_name [ RESTRICT | CASCADE ] 
| ROW LEVEL SECURITY { ON | OFF } [ CONJUNCTION TYPE { AND | OR } ] [ FOR DATASHARES ]
| MASKING { ON | OFF } FOR DATASHARES }

where table_constraint is:

[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ... ] )
| PRIMARY KEY ( column_name [, ... ] )
| FOREIGN KEY (column_name [, ... ] )
   REFERENCES  reftable [ ( refcolumn ) ]}

The following options apply only to external tables:

SET LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' }
| SET FILE FORMAT format |
| SET TABLE PROPERTIES ('property_name'='property_value')
| PARTITION ( partition_column=partition_value [, ...] )
  SET LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' }
| ADD [IF NOT EXISTS]
    PARTITION ( partition_column=partition_value [, ...] ) LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' }
    [, ... ]
| DROP PARTITION ( partition_column=partition_value [, ...] )
```

ALTER TABLE 명령을 실행하는 시간을 줄이려면 ALTER TABLE 명령의 일부 절을 결합할 수 있습니다.

Amazon Redshift는 ALTER TABLE 절의 다음 조합을 지원합니다.

```
ALTER TABLE tablename ALTER SORTKEY (column_list), ALTER DISTKEY column_Id;
ALTER TABLE tablename ALTER DISTKEY column_Id, ALTER SORTKEY (column_list);
ALTER TABLE tablename ALTER SORTKEY (column_list), ALTER DISTSTYLE ALL;
ALTER TABLE tablename ALTER DISTSTYLE ALL, ALTER SORTKEY (column_list);
```

## 파라미터
파라미터

 *table\$1name*   
수정할 테이블 이름. 특정 스키마를 사용하려면 테이블의 이름만 지정하거나 *schema\$1name.table\$1name* 형식을 사용하세요. 외부 테이블은 외부 스키마 이름으로 정규화해야 합니다. ALTER TABLE 문을 사용하여 뷰의 이름을 바꾸거나 그 소유자를 변경하려는 경우 뷰 이름을 지정할 수도 있습니다. 테이블 이름의 최대 길이는 127바이트이며, 이보다 긴 이름은 127바이트까지 표시되고 나머지는 잘립니다. 최대 4바이트까지 UTF-8 멀티바이트 문자를 사용할 수 있습니다. 유효한 이름에 대한 자세한 내용은 [이름 및 식별자](r_names.md) 섹션을 참조하세요.

ADD *table\$1constraint*   
테이블에 지정된 제약 조건을 추가하는 절입니다. 유효한 *table\$1constraint* 값에 대한 설명은 [CREATE TABLE](r_CREATE_TABLE_NEW.md) 섹션을 참조하세요.  
Null 허용 열에 기본 키 제약 조건을 추가할 수 없습니다. 이 열이 원래 NOT NULL 제약 조건으로 생성된 경우에는 기본 키 제약 조건을 추가할 수 있습니다.

DROP CONSTRAINT *constraint\$1name*   
테이블에서 명명된 제약 조건을 삭제하는 절입니다. 제약 조건을 삭제하려면 제약 조건 유형이 아니라 제약 조건 이름을 지정하세요. 테이블 제약 조건 이름을 보려면 다음 쿼리를 실행합니다.  

```
select constraint_name, constraint_type
from information_schema.table_constraints;
```

RESTRICT   
지정된 제약 조건만 제거하는 절입니다. RESTRICT는 DROP CONSTRAINT에 대한 옵션입니다. RESTRICT는 CASCADE와 함께 사용할 수 없습니다.

CASCADE   
지정된 제약 조건과 그 제약 조건에 종속된 모든 것을 제거하는 절입니다. CASCADE는 DROP CONSTRAINT에 대한 옵션입니다. CASCADE는 RESTRICT와 함께 사용할 수 없습니다.

OWNER TO *new\$1owner*   
테이블(또는 뷰)의 소유자를 *new\$1owner* 값으로 변경하는 절입니다.

RENAME TO *new\$1name*   
테이블(또는 뷰)의 이름을 *new\$1name*에 지정된 값으로 바꾸는 절입니다. 최대 테이블 이름 길이는 127바이트이며, 이보다 긴 이름은 127바이트까지 표시되고 나머지는 잘립니다.  
영구 테이블 이름을 '\$1'로 시작하는 이름으로 바꿀 수 없습니다. '\$1'로 시작하는 테이블 이름은 임시 테이블을 나타냅니다.  
외부 테이블의 이름을 변경할 수 없습니다.

ALTER COLUMN *column\$1name* TYPE *updated\$1varchar\$1data\$1type\$1size*   
VARCHAR 데이터 형식으로 정의된 열 크기를 변경하는 절입니다. 이 절은 VARCHAR 데이터 유형의 크기 변경만 지원합니다. 다음 제한을 고려하세요.  
+ 압축 인코딩 BYTEDICT, RUNLENGTH, TEXT255 또는 TEXT32K를 사용하는 열은 변경할 수 없습니다.
+ 기존 데이터의 최대 크기보다 작게 크기를 줄일 수 없습니다.
+ 기본값이 있는 열은 변경할 수 없습니다.
+ UNIQUE, PRIMARY KEY 또는 FOREIGN KEY가 있는 열은 변경할 수 없습니다.
+ 트랜잭션 블록(BEGIN ... END) 내에서 열을 변경할 수 없습니다. 버전 관리에 대한 자세한 내용은 [Amazon Redshift의 격리 수준](c_serial_isolation.md) 섹션을 참조하세요.

ALTER COLUMN *column\$1name* ENCODE *new\$1encode\$1type*   
열의 압축 인코딩을 변경하는 절입니다. 열에 압축 인코딩을 지정하면 테이블이 더 이상 ENCODE AUTO로 설정되지 않습니다. 압축 인코딩에 대한 자세한 내용은 [열 압축으로 저장된 데이터 크기 축소](t_Compressing_data_on_disk.md) 섹션을 참조하세요.  
열에 압축 인코딩을 변경하면 테이블을 쿼리할 수 있습니다.  
다음 제한을 고려하세요.  
+ 열에 대해 현재 정의된 것과 동일한 인코딩으로 열을 변경할 수 없습니다.
+ 인터리브 정렬 키가 있는 테이블의 열에 대한 인코딩을 변경할 수 없습니다.

ALTER COLUMN *column\$1name* ENCODE *encode\$1type*, ALTER COLUMN *column\$1name* ENCODE *encode\$1type*, .....;  
단일 명령에서 여러 열의 압축 인코딩을 변경하는 절입니다. 압축 인코딩에 대한 자세한 내용은 [열 압축으로 저장된 데이터 크기 축소](t_Compressing_data_on_disk.md) 섹션을 참조하세요.  
열에 압축 인코딩을 변경하면 테이블을 쿼리할 수 있습니다.  
 다음 제한을 고려하세요.  
+ 단일 명령에서 열을 동일하거나 다른 인코딩 형식으로 여러 번 변경할 수 없습니다.
+ 열에 대해 현재 정의된 것과 동일한 인코딩으로 열을 변경할 수 없습니다.
+ 인터리브 정렬 키가 있는 테이블의 열에 대한 인코딩을 변경할 수 없습니다.

ALTER DISTSTYLE ALL  
테이블의 기존 분산 스타일을 `ALL`으로 변경하는 절입니다. 다음을 고려하세요.  
+ ALTER DISTSTYLE, ALTER SORTKEY, VACUUM은 동일한 테이블에서 동시에 실행할 수 없습니다.
  + VACUUM이 현재 실행 중인 경우 ALTER DISTSTYLE ALL을 실행하면 오류가 반환됩니다.
  + ALTER DISTSTYLE ALL이 실행 중인 경우 백그라운드 VACCUM이 테이블에서 시작되지 않습니다.
+ 인터리브 정렬 키 및 임시 테이블이 있는 테이블에는 ALTER DISTYLE ALL 명령이 지원되지 않습니다.
+ 배포 스타일이 이전에 AUTO로 정의된 경우 테이블은 더 이상 자동 테이블 최적화의 후보가 아닙니다.
DISTSTYLE ALL에 대한 자세한 내용은 [CREATE TABLE](r_CREATE_TABLE_NEW.md) 섹션을 참조하세요.

ALTER DISTSTYLE EVEN  
테이블의 기존 분산 스타일을 `EVEN`으로 변경하는 절입니다. 다음을 고려하세요.  
+ ALTER DISTSYTLE, ALTER SORTKEY, VACUUM은 동일한 테이블에서 동시에 실행할 수 없습니다.
  + VACUUM이 현재 실행 중인 경우 ALTER DISTSTYLE EVEN을 실행하면 오류가 반환됩니다.
  + ALTER DISTSTYLE EVEN이 실행 중인 경우 백그라운드 VACCUM이 테이블에서 시작되지 않습니다.
+ 인터리브 정렬 키 및 임시 테이블이 있는 테이블에는 ALTER DISTYLE EVEN 명령이 지원되지 않습니다.
+ 배포 스타일이 이전에 AUTO로 정의된 경우 테이블은 더 이상 자동 테이블 최적화의 후보가 아닙니다.
DISTSTYLE EVEN에 대한 자세한 내용은 [CREATE TABLE](r_CREATE_TABLE_NEW.md) 섹션을 참조하세요.

ALTER DISTKEY *column\$1name* 또는 ALTER DISTSTYLE KEY DISTKEY *column\$1name*  
테이블의 배포 키로 사용되는 열을 변경하는 절입니다. 다음을 고려하세요.  
+ VACUUM 및 ALTER DISTKEY는 동일한 테이블 상에서 동시에 실행할 수 없습니다.
  + VACUUM이 이미 실행 중인 경우 ALTER DISTKEY가 오류를 반환합니다.
  + ALTER DISTKEY가 실행 중인 경우 백그라운드 VACCUM이 테이블에서 시작되지 않습니다.
  + ALTER DISTKEY가 실행 중인 경우 포그라운드 VACCUM이 오류를 반환합니다.
+ 테이블에서 한 번에 하나의 ALTER DISTKEY 명령만 실행할 수 있습니다.
+ 인터리브 정렬 키가 있는 테이블에는 ALTER DISTKEY 명령이 지원되지 않습니다.
+ 배포 스타일이 이전에 AUTO로 정의된 경우 테이블은 더 이상 자동 테이블 최적화의 후보가 아닙니다.
DISTSTYLE KEY를 지정할 때 데이터는 DISTKEY 열에 있는 값을 기준으로 배포됩니다. DISTSTYLE에 대한 자세한 내용은 [CREATE TABLE](r_CREATE_TABLE_NEW.md) 섹션을 참조하세요.

ALTER DISTSTYLE AUTO  
테이블의 기존 배포 스타일을 AUTO로 변경하는 절입니다.  
배포 스타일을 AUTO로 변경하면 테이블의 배포 스타일이 다음과 같이 설정됩니다.  
+ DISTSTYLE ALL이 있는 작은 테이블은 AUTO(ALL)로 변환됩니다.
+ DISTSTYLE EVEN이 있는 작은 테이블은 AUTO(ALL)로 변환됩니다.
+ DISTSTYLE KEY가 있는 작은 테이블은 AUTO(ALL)로 변환됩니다.
+ DISTSTYLE ALL이 있는 큰 테이블은 AUTO(EVEN)로 변환됩니다.
+ DISTSTYLE EVEN이 있는 큰 테이블은 AUTO(EVEN)로 변환됩니다.
+ DISTSTYLE KEY가 있는 큰 테이블은 AUTO(KEY)로 변환되고 DISTKEY는 보존됩니다. 이 경우 Amazon Redshift는 테이블을 변경하지 않습니다.
새로운 배포 스타일 또는 키가 쿼리 성능을 향상시킬 것이라고 판단되면 Amazon Redshift는 향후 테이블의 배포 스타일이나 키를 변경할 수 있습니다. 예를 들어 Amazon Redshift는 DISTSTYLE이 AUTO(KEY)인 테이블을 AUTO(EVEN)로 또는 그 반대로 변환할 수 있습니다. 데이터 재배포 및 잠금을 포함하여 배포 키가 변경될 때의 동작에 대한 자세한 내용은 [Amazon Redshift Advisor 권장 사항](https://docs.aws.amazon.com/redshift/latest/dg/advisor-recommendations.html#alter-diststyle-distkey-recommendation)을 참조하세요.  
DISTSTYLE AUTO에 대한 자세한 내용은 [CREATE TABLE](r_CREATE_TABLE_NEW.md) 섹션을 참조하세요.  
테이블의 배포 스타일을 보려면 SVV\$1TABLE\$1INFO 시스템 카탈로그 뷰를 쿼리합니다. 자세한 내용은 [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md) 섹션을 참조하세요. 테이블에 대한 Amazon Redshift Advisor 권장 사항을 보려면 SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS 시스템 카탈로그 뷰를 쿼리합니다. 자세한 내용은 [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md) 섹션을 참조하세요. Amazon Redshift에서 수행한 작업을 보려면 SVL\$1AUTO\$1WORKER\$1ACTION 시스템 카탈로그 뷰를 쿼리합니다. 자세한 내용은 [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md) 섹션을 참조하세요.

ALTER [COMPOUND] SORTKEY ( *column\$1name* [,...] )  
테이블에 사용되는 정렬 키를 변경하거나 추가하는 절입니다. 임시 테이블에는 ALTER SORTKEY가 지원되지 않습니다.  
정렬 키를 변경하면 새 정렬 키 또는 원래 정렬 키에 있는 열의 압축 인코딩이 변경될 수 있습니다. 테이블에 대해 명시적으로 정의된 인코딩이 없는 경우 Amazon Redshift는 다음과 같이 압축 인코딩을 자동으로 할당합니다.  
+ 정렬 키로 정의된 열은 RAW 압축이 할당됩니다.
+ BOOLEAN, REAL 또는 DOUBLE PRECISION 데이터 형식으로 정의된 열은 RAW 압축이 할당됩니다.
+ SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP 또는 TIMESTAMPTZ로 정의된 열에는 AZ64 압축이 할당됩니다.
+ CHAR 또는 VARCHAR로 정의된 열에는 LZO 압축이 할당됩니다.
다음을 고려하세요.  
+ 테이블당 정렬 키에 최대 400개의 열을 정의할 수 있습니다.
+ 인터리브 정렬 키를 복합 정렬 키 또는 정렬 키 없음으로 변경할 수 있습니다. 그러나 복합 정렬 키를 인터리브 정렬 키로 변경할 수는 없습니다.
+ 정렬 키가 이전에 AUTO로 정의된 경우 테이블은 더 이상 자동 테이블 최적화의 후보가 아닙니다.
+ Amazon Redshift는 정렬 키로 정의된 열에 대해 RAW 인코딩(압축 없음)을 사용하는 것이 좋습니다. 열을 변경하여 정렬 키로 선택하면 열의 압축이 RAW 압축(압축 없음)으로 변경됩니다. 이렇게 하면 테이블에 필요한 스토리지 양이 늘어날 수 있습니다. 테이블 크기 증가량은 특정 테이블 정의와 테이블 내용에 따라 다릅니다. 압축에 대한 자세한 내용은 [압축 인코딩](c_Compression_encodings.md) 섹션을 참조하세요.
데이터가 테이블에 로드되면 데이터는 정렬 키의 순서로 로드됩니다. 정렬 키를 변경하면 Amazon Redshift는 데이터를 재정렬합니다. SORTKEY에 대한 자세한 내용은 [CREATE TABLE](r_CREATE_TABLE_NEW.md) 섹션을 참조하세요.

ALTER SORTKEY AUTO  
대상 테이블의 정렬 키를 AUTO로 변경하거나 추가하는 절입니다. 임시 테이블에는 ALTER SORTKEY AUTO가 지원되지 않습니다.  
정렬 키를 AUTO로 변경하면 Amazon Redshift는 테이블의 기존 정렬 키를 보존합니다.  
새로운 정렬 키가 쿼리 성능을 향상시킬 것이라고 판단되면 Amazon Redshift는 향후 테이블의 정렬 키를 변경할 수 있습니다.  
SORTKEY AUTO에 대한 자세한 내용은 [CREATE TABLE](r_CREATE_TABLE_NEW.md) 섹션을 참조하세요.  
테이블의 정렬 키를 보려면 SVV\$1TABLE\$1INFO 시스템 카탈로그 뷰를 쿼리합니다. 자세한 내용은 [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md) 섹션을 참조하세요. 테이블에 대한 Amazon Redshift Advisor 권장 사항을 보려면 SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS 시스템 카탈로그 뷰를 쿼리합니다. 자세한 내용은 [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md) 섹션을 참조하세요. Amazon Redshift에서 수행한 작업을 보려면 SVL\$1AUTO\$1WORKER\$1ACTION 시스템 카탈로그 뷰를 쿼리합니다. 자세한 내용은 [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md) 섹션을 참조하세요.

ALTER SORTKEY NONE  
대상 테이블의 정렬 키를 제거하는 절입니다.  
정렬 키가 이전에 AUTO로 정의된 경우 테이블은 더 이상 자동 테이블 최적화의 후보가 아닙니다.

ALTER ENCODE AUTO  
대상 테이블 열의 인코딩 형식을 AUTO로 변경하는 절입니다. 인코딩을 AUTO로 변경하면 Amazon Redshift는 테이블에 있는 열의 기존 인코딩 형식이 보존됩니다. 그런 다음 새 인코딩 형식이 쿼리 성능을 향상시킬 수 있다고 판단되면 Amazon Redshift가 테이블 열의 인코딩 형식을 변경할 수 있습니다.  
인코딩을 지정하기 위해 하나 이상의 열을 변경하는 경우 Amazon Redshift는 더 이상 테이블의 모든 열에 대한 인코딩을 자동으로 조정하지 않습니다. 열은 현재 인코딩 설정을 유지합니다.  
다음 작업은 테이블의 ENCODE AUTO 설정에 영향을 주지 않습니다.  
+ 테이블 이름 바꾸기.
+ 테이블에 대한 DISTSTYLE 또는 SORTKEY 설정 변경.
+ ENCODE 설정으로 열 추가 또는 삭제.
+ COPY 명령의 COMPUPDATE 옵션 사용. 자세한 내용은 [데이터 로드 작업](copy-parameters-data-load.md) 섹션을 참조하세요.
테이블의 인코딩을 보려면 SVV\$1TABLE\$1INFO 시스템 카탈로그 뷰를 쿼리합니다. 자세한 내용은 [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md) 섹션을 참조하세요.

RENAME COLUMN *column\$1name* TO *new\$1name*   
열의 이름을 *new\$1name*에 지정된 값으로 바꾸는 절입니다. 최대 열 이름 길이는 127바이트이며, 이보다 긴 이름은 127바이트까지 표시되고 나머지는 잘립니다. 유효한 이름에 대한 자세한 내용은 [이름 및 식별자](r_names.md) 섹션을 참조하세요.

ADD [ COLUMN ] *column\$1name*   
테이블에 지정된 이름과 함께 열을 추가하는 절입니다. 각각의 ALTER TABLE 문에 한 개의 열만 추가할 수 있습니다.  
테이블의 배포 키(DISTKEY) 또는 정렬 키(SORTKEY)인 열은 추가할 수 없습니다.  
 ALTER TABLE ADD COLUMN 명령을 사용하여 다음 테이블 및 열 속성을 수정할 수 없습니다.  
+ UNIQUE
+ PRIMARY KEY
+ REFERENCES(외래 키)
+ IDENTITY 또는 GENERATED BY DEFAULT AS IDENTITY
최대 열 이름 길이는 127바이트이며, 이보다 긴 이름은 127바이트까지 표시되고 나머지는 잘립니다. 단일 테이블에서 정의할 수 있는 최대 열 수는 1,600개입니다.  
외부 테이블에 열을 추가할 때는 다음과 같은 제한 사항이 적용됩니다.  
+ 열 제약 조건 DEFAULT, ENCODE, NOT NULL, NULL이 있는 외부 테이블에 열을 추가할 수 없습니다.
+ AVRO 파일 형식으로 정의된 외부 테이블에 열을 추가할 수 없습니다.
+ 가상 열이 활성화되어 있으면 외부 테이블 하나에서 정의할 수 있는 최대 열 개수는 1,598개입니다. 가상 열이 활성화되어 있지 않으면 테이블 하나에서 정의할 수 있는 최대 열 개수는 1,600개입니다.
자세한 내용은 [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md) 섹션을 참조하세요.

 *column\$1type*   
추가되는 열의 데이터 형식입니다. CHAR 및 VARCHAR 열의 경우 최대 길이를 선언하는 대신 MAX 키워드를 사용할 수 있습니다. MAX는 최대 길이를 CHAR의 경우 4,096바이트, VARCHAR의 경우 65,535바이트로 설정합니다. GEOMETRY 객체의 최대 크기는 1,048,447바이트입니다.  
Amazon Redshift에서 지원하는 데이터 형식에 대한 자세한 내용은 [데이터 타입](c_Supported_data_types.md) 섹션을 참조하세요.

DEFAULT *default\$1expr*   <a name="alter-table-default"></a>
열의 기본 데이터 값을 할당하는 절입니다. *default\$1expr*의 데이터 형식은 열의 데이터 형식과 일치해야 합니다. DEFAULT 값은 변수가 없는 표현식이어야 합니다. 하위 쿼리, 현재 테이블에 있는 다른 열과의 상호 참조, 사용자 정의 함수는 허용되지 않습니다.  
*default\$1expr*은 열의 값을 지정하지 않는 INSERT 작업에 사용됩니다. 기본값이 지정되지 않은 경우 열의 기본값은 Null입니다.  
COPY 작업에서 DEFAULT 값과 NOT NULL 제약 조건을 가진 열에 null 필드가 나타나는 경우 COPY 명령은 *default\$1expr*의 값을 삽입합니다.  
외부 테이블에는 DEFAULT가 지원되지 않습니다.

ENCODE *encoding*   
열에 대한 압축 인코딩입니다. 기본적으로 Amazon Redshift는 테이블의 열에 대해 압축 인코딩을 지정하지 않거나 테이블에 대해 ENCODE AUTO 옵션을 지정하는 경우 테이블의 모든 열에 대한 압축 인코딩을 자동으로 관리합니다.  
테이블의 열에 대해 압축 인코딩을 지정하거나 테이블에 대해 ENCODE AUTO 옵션을 지정하지 않으면 Amazon Redshift는 다음과 같이 압축 인코딩을 지정하지 않은 열에 압축 인코딩을 자동으로 할당합니다.  
+ 임시 테이블의 모든 열은 기본적으로 RAW 압축으로 할당됩니다.
+ 정렬 키로 정의된 열은 RAW 압축이 할당됩니다.
+ BOOLEAN, REAL, DOUBLE PRECISION, GEOMETRY 또는 GEOGRAPHY 데이터 유형으로 정의된 열은 RAW 압축이 할당됩니다.
+ SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP 또는 TIMESTAMPTZ로 정의된 열에는 AZ64 압축이 할당됩니다.
+ CHAR, VARCHAR 또는 VARBYTE로 정의된 열에는 LZO 압축이 할당됩니다.
열을 압축하지 않으려면 RAW 인코딩을 명시적으로 지정하세요.
다음 모듈을 지원합니다.[compression encodings](c_Compression_encodings.md#compression-encoding-list)  
+ AZ64
+ BYTEDICT
+ 델타
+ 델타
+ LZO
+ LZO
+ LZO
+ LZO
+ RAW(압축 없음)
+ RUNLENGTH
+ TEXT255
+ TEXT32K
+ ZSTD
외부 테이블에는 ENCODE가 지원되지 않습니다.

NOT NULL \$1 NULL   
NOT NULL은 열이 null 값을 포함하도록 허용되지 않도록 지정합니다. 기본값인 NULL은 열이 null 값을 허용하도록 지정합니다.  
외부 테이블에는 NOT NULL 및 NULL가 지원되지 않습니다.

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
열의 문자열 검색 또는 비교가 대소문자를 구분하는지, 구분하지 않는지를 지정하는 절입니다. 기본값은 데이터베이스의 현재 대/소문자 구분 구성과 동일합니다.  
데이터베이스 데이터 정렬 정보를 찾으려면 다음 명령을 사용합니다.  

```
SELECT db_collation();
                     
db_collation
----------------
 case_sensitive
(1 row)
```
CASE\$1SENSITIVE와 CS는 서로 바꿔 사용할 수 있으며 동일한 결과를 냅니다. 마찬가지로 CASE\$1INSENSITIVE와 CI는 서로 바꿔 사용할 수 있으며 동일한 결과를 냅니다.

DROP [ COLUMN ] *column\$1name*   
테이블에서 삭제할 열의 이름입니다.  
테이블의 마지막 열은 삭제할 수 없습니다. 테이블에는 열이 하나 이상 있어야 합니다.  
테이블의 배포 키(DISTKEY) 또는 정렬 키(SORTKEY)인 열은 삭제할 수 없습니다. 열에 뷰, 기본 키, 외래 키 또는 UNIQUE 제한과 같이 종속적 객체가 있는 경우 DROP COLUMN의 기본 동작은 RESTRICT입니다.  
외부 테이블에서 열을 삭제할 경우 다음과 같은 제한 사항이 적용됩니다.  
+ 외부 테이블에서 파티션 열로 사용되는 열은 삭제할 수 없습니다.
+ AVRO 파일 형식으로 정의된 외부 테이블에서는 열을 삭제할 수 없습니다.
+ 외부 테이블에서는 RESTRICT 및 CASCADE를 무시합니다.
+ 정책을 삭제하거나 분리하지 않으면 정책 정의 내에서 참조되는 정책 테이블의 열을 삭제할 수 없습니다. 이는 CASCADE 옵션이 지정된 경우에도 적용됩니다. 정책 테이블의 다른 열은 삭제할 수 있습니다.
자세한 내용은 [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md) 섹션을 참조하세요.

RESTRICT   
DROP COLUMN과 함께 사용하는 경우 RESTRICT는 다음과 같은 경우 삭제하려는 열이 삭제되지 않음을 나타냅니다.  
+ 정의된 보기가 삭제할 열을 참조하는 경우
+ 외래 키가 삭제할 열을 참조하는 경우
+ 삭제할 열이 멀티파트 키에 포함된 경우
RESTRICT는 CASCADE와 함께 사용할 수 없습니다.  
외부 테이블에서는 RESTRICT 및 CASCADE를 무시합니다.

CASCADE   
DROP COLUMN과 함께 사용될 때, 지정된 열과 그 열에 종속된 모든 것을 제거합니다. CASCADE는 RESTRICT와 함께 사용할 수 없습니다.  
외부 테이블에서는 RESTRICT 및 CASCADE를 무시합니다.

다음 옵션은 외부 테이블에만 적용됩니다.

SET LOCATION \$1 's3://*bucket/folder*/' \$1 's3://*bucket/manifest\$1file*' \$1  
데이터 파일이 포함된 Amazon S3 폴더 또는 Amazon S3 객체 경로 목록이 포함된 매니페스트 파일의 경로. 버킷은 Amazon Redshift 클러스터와 동일한 AWS 리전에 있어야 합니다. 지원되는 AWS 리전 목록은 [Amazon Redshift Spectrum 제한 사항](c-spectrum-considerations.md) 섹션을 참조하세요. 매니페스트 파일 사용에 대한 자세한 내용은 CREATE EXTERNAL TABLE [파라미터](r_CREATE_EXTERNAL_TABLE.md#r_CREATE_EXTERNAL_TABLE-parameters) 참조의 LOCATION을 참조하세요.

SET FILE FORMAT *format*  
외부 데이터 파일의 파일 형식입니다.  
유효한 형식은 다음과 같습니다.  
+ AVRO 
+ PARQUET
+ RCFILE
+ SEQUENCEFILE
+ TEXTFILE 

SET TABLE PROPERTIES ( '*property\$1name*'='*property\$1value*')   
외부 테이블에 대한 테이블 속성의 테이블 정의를 설정하는 절입니다.  
테이블 속성은 대/소문자를 구분합니다.  
'numRows'='*row\$1count*'  
테이블 정의를 위해 numRows 값을 설정하는 속성입니다. 외부 테이블의 통계를 명시적으로 업데이트하려면 테이블의 크기를 나타내도록 numRows 속성을 설정합니다. Amazon Redshift는 쿼리 옵티마이저가 쿼리 계획을 생성하는 데 사용하는 테이블 통계를 생성하기 위해 외부 테이블을 분석하지 않습니다. 테이블 통계가 외부 테이블에 대해 설정되지 않은 경우 Amazon Redshift는 쿼리 실행 계획을 실행합니다. 이 계획은 외부 테이블이 더 큰 테이블이고 로컬 테이블이 더 작은 테이블이라는 가정에 기초하여 생성됩니다.  
'skip.header.line.count'='*line\$1count*'  
각 원본 파일의 시작 부분에서 건너 뛸 행 개수를 설정하는 속성입니다.

PARTITION ( *partition\$1column*=*partition\$1value* [, ...] SET LOCATION \$1 's3://*bucket*/*folder*' \$1 's3://*bucket*/*manifest\$1file*' \$1  
하나 이상의 파티션 열의 위치를 새로 설정하는 절입니다.

ADD [ IF NOT EXISTS ] PARTITION ( *partition\$1column*=*partition\$1value* [, ...] ) LOCATION \$1 's3://*bucket*/*folder*' \$1 's3://*bucket*/*manifest\$1file*' \$1 [, ... ]  
파티션을 하나 이상 추가하는 절입니다. 단일 ALTER TABLE … ADD 문을 사용하여 여러 PARTITION 절을 지정할 수 있습니다.  
AWS Glue 카탈로그를 사용하는 경우 단일 ALTER TABLE 문을 사용하여 파티션을 최대 100개까지 추가할 수 있습니다.
IF NOT EXISTS 절은 지정한 파티션이 이미 있으면 명령이 아무 것도 변경하지 않아야 함을 나타냅니다. 또한 명령 실행 시 오류 메시지와 함께 종료되지 않고 파티션이 존재한다는 메시지를 반환해야 함을 나타냅니다. 이 절은 스크립트 작성 시 유용하므로, ALTER TABLE이 이미 존재하는 파티션의 추가를 시도하는 경우 스크립트가 실패하지 않습니다.

DROP PARTITION (*partition\$1column*=*partition\$1value* [, ...] )   
지정된 파티션을 삭제하는 절입니다. 파티션을 삭제하는 외부 테이블 메타데이터만 변경됩니다. Amazon S3의 데이터는 영향을 받지 않습니다.

ROW LEVEL SECURITY \$1 ON \$1 OFF \$1 [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] [ FOR DATASHARES ]  
관계에 대한 행 수준 보안을 켜거나 끄는 절입니다.  
관계에 대해 행 수준 보안이 켜 있으면 행 수준 보안 정책에서 액세스를 허용하는 행만 읽을 수 있습니다. 관계에 대한 액세스 권한을 부여하는 정책이 없으면 관계에서 행을 볼 수 없습니다. 수퍼유저 및 `sys:secadmin` 역할을 가진 사용자 또는 역할만 ROW LEVEL SECURITY 절을 설정할 수 있습니다. 자세한 내용은 [행 수준 보안](t_rls.md) 섹션을 참조하세요. 이 문은 연결된 데이터베이스 또는 Amazon Redshift 페더레이션 권한이 있는 데이터베이스에서 지원됩니다. FOR DATASHARES 절은 Amazon Redshift 페더레이션 권한이 있는 데이터베이스에서는 지원되지 않습니다.  
+ [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] 

  관계에 대해 행 수준 보안 정책의 접속사 유형을 선택할 수 있도록 하는 절입니다. 여러 행 수준 보안 정책이 관계에 연결된 경우 정책을 AND 또는 OR 절과 결합할 수 있습니다. 기본적으로 Amazon Redshift는 RLS 정책을 AND 절과 결합합니다. `sys:secadmin` 역할이 있는 슈퍼 사용자, 사용자 또는 역할은 이 절을 사용하여 관계에 대한 행 수준 보안 정책의 접속사 유형을 정의할 수 있습니다. 자세한 내용은 [사용자별로 여러 정책 결합](t_rls_combine_policies.md) 섹션을 참조하세요.
+ FOR DATASHARES

  RLS로 보호되는 관계에 데이터 공유를 통해 액세스할 수 있는지를 결정하는 절입니다. 기본적으로 RLS로 보호되는 관계는 데이터 공유를 통해 액세스할 수 없습니다. ALTER TABLE ROW LEVEL SECURITY 명령을 이 절과 함께 실행하면 관계의 데이터 공유 접근성 속성에만 영향을 줍니다. ROW LEVEL SECURITY 속성은 변경되지 않습니다.

   RLS로 보호되는 관계에 데이터 공유를 통해 액세스할 수 있도록 설정하면 소비자 측 데이터 공유 데이터베이스에서 해당 관계에 행 수준 보안이 적용되지 않습니다. 이 관계는 생산자 측에서 해당 RLS 속성을 유지합니다.

MASKING \$1 ON \$1 OFF \$1 FOR DATASHARES  
DDM으로 보호되는 관계를 데이터 공유를 통해 액세스할 수 있는지를 결정하는 절입니다. 기본적으로 DDM으로 보호되는 관계는 데이터 공유를 통해 액세스할 수 없습니다. DDM으로 보호되는 관계를 데이터 공유를 통해 액세스할 수 있도록 설정하면 소비자측 데이터 공유 데이터베이스에서 마스킹 보호가 적용되지 않습니다. 이 관계는 생산자측에서 해당 마스킹 속성을 유지합니다. 수퍼유저 및 `sys:secadmin` 역할을 가진 사용자 또는 역할만 MASKING FOR DATASHARES 절을 설정할 수 있습니다. 자세한 내용은 [동적 데이터 마스킹](t_ddm.md) 섹션을 참조하세요.

## 예제
예제

ALTER TABLE 명령을 사용하는 방법을 보여주는 예제는 다음을 참조하세요.
+ [ALTER TABLE 예](r_ALTER_TABLE_examples_basic.md)
+ [ALTER EXTERNAL TABLE 예](r_ALTER_TABLE_external-table.md)
+ [ALTER TABLE ADD 및 DROP COLUMN 예](r_ALTER_TABLE_COL_ex-add-drop.md)

# ALTER TABLE 예
ALTER TABLE 예

다음은 ALTER TABLE 명령의 기본적인 사용법을 보여주는 예입니다.

## 테이블 또는 뷰의 이름 바꾸기
테이블 또는 뷰의 이름 바꾸기

다음 명령을 실행하면 USERS 테이블의 이름이 USERS\$1BKUP로 바뀝니다.

```
alter table users
rename to users_bkup;
```

 이 형식의 명령을 사용하여 뷰의 이름을 바꿀 수도 있습니다.

## 테이블 또는 뷰의 소유자 변경
테이블 또는 뷰의 소유자 변경

다음 명령을 실행하면 VENUE 테이블 소유자가 사용자 DWUSER로 변경됩니다.

```
alter table venue
owner to dwuser;
```

다음 명령을 실행하면 뷰가 생성된 다음, 소유자가 변경됩니다.

```
create view vdate as select * from date;
alter table vdate owner to vuser;
```

## 열 이름 바꾸기
열 이름 바꾸기

다음 명령을 실행하면 VENUE 테이블에 있는 VENUESEATS 열의 이름이 VENUESIZE로 바뀝니다.

```
alter table venue
rename column venueseats to venuesize;
```

## 테이블 제약 조건 삭제
테이블 제약 조건 삭제

기본 키, 외래 키 또는 고유한 제약 조건과 같은 테이블 제약 조건을 삭제하려면, 먼저 제약 조건의 내부 이름을 찾습니다. 그런 다음 ALTER TABLE 명령에서 제약 이름을 지정합니다. 다음 예제에서는 CATEGORY 테이블에 대한 제약 조건을 찾은 다음, 이름이 `category_pkey`인 기본 키를 삭제합니다.

```
select constraint_name, constraint_type
from information_schema.table_constraints
where constraint_schema ='public'
and table_name = 'category';

constraint_name | constraint_type
----------------+----------------
category_pkey   | PRIMARY KEY

alter table category
drop constraint category_pkey;
```

## VARCHAR 열 변경
VARCHAR 열 변경

스토리지를 절약하려면 처음에 현재 데이터 요구 사항에 필요한 최소 크기인 VARCHAR 열로 테이블을 정의하면 됩니다. 나중에 더 긴 문자열을 수용해야 하는 경우 테이블을 변경하여 열 크기를 늘릴 수 있습니다.

다음 예에서는 EVENTNAME 열 크기를 VARCHAR(300)로 변경합니다.

```
alter table event alter column eventname type varchar(300);
```

## VARBYTE 열 변경
VARBYTE 열 변경

스토리지를 절약하려면 처음에 현재 데이터 요구 사항에 필요한 최소 크기인 VARBYTE 열로 테이블을 정의하면 됩니다. 나중에 더 긴 문자열을 수용해야 하는 경우 테이블을 변경하여 열 크기를 늘릴 수 있습니다.

다음 예에서는 EVENTNAME 열 크기를 VARBYTE(300)로 변경합니다.

```
alter table event alter column eventname type varbyte(300);
```

## 열에 대한 압축 인코딩 변경
열 압축 인코딩 변경

열의 압축 인코딩을 변경할 수 있습니다. 아래에서 이 접근 방식을 보여주는 일련의 예를 찾아볼 수 있습니다. 이러한 예에 대한 테이블 정의는 다음과 같습니다.

```
create table t1(c0 int encode lzo, c1 bigint encode zstd, c2 varchar(16) encode lzo, c3 varchar(32) encode zstd);
```

다음 문은 열 c0에 대한 압축 인코딩을 LZO 인코딩에서 AZ64 인코딩으로 변경합니다.

```
alter table t1 alter column c0 encode az64;
```

다음 문은 열 c1에 대한 압축 인코딩을 Zstandard 인코딩에서 AZ64 인코딩으로 변경합니다.

```
alter table t1 alter column c1 encode az64;
```

다음 문은 열 c2에 대한 압축 인코딩을 LZO 인코딩에서 Byte-dictionary 인코딩으로 변경합니다.

```
alter table t1 alter column c2 encode bytedict;
```

다음 문은 열 c3에 대한 압축 인코딩을 Zstandard 인코딩에서 Runlength 인코딩으로 변경합니다.

```
alter table t1 alter column c3 encode runlength;
```

## DISTSTYLE KEY DISTKEY 열 변경
DISTSTYLE KEY DISTKEY 열 변경

다음 예에서는 테이블의 DISTSTYLE 및 DISTKEY를 변경하는 방법을 보여 줍니다.

EVEN 배포 스타일의 테이블을 생성합니다. SVV\$1TABLE\$1INFO 보기는 DISTSTYLE이 EVEN임을 보여 줍니다.

```
create table inventory(
  inv_date_sk int4 not null ,
  inv_item_sk int4 not null ,
  inv_warehouse_sk int4 not null ,
  inv_quantity_on_hand int4
) diststyle even;

Insert into inventory values(1,1,1,1);

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     EVEN
```

DISTKEY 테이블을 `inv_warehouse_sk`로 변경합니다. SVV\$1TABLE\$1INFO 보기는 `inv_warehouse_sk` 열을 결과 배포 키로 보여 줍니다.

```
alter table inventory alter diststyle key distkey inv_warehouse_sk;

select "table", "diststyle" from svv_table_info;

   table   |       diststyle
-----------+-----------------------
 inventory | KEY(inv_warehouse_sk)
```

DISTKEY 테이블을 `inv_item_sk`로 변경합니다. SVV\$1TABLE\$1INFO 보기는 `inv_item_sk` 열을 결과 배포 키로 보여 줍니다.

```
alter table inventory alter distkey inv_item_sk;

select "table", "diststyle" from svv_table_info;

   table   |       diststyle
-----------+-----------------------
 inventory | KEY(inv_item_sk)
```

## 테이블을 DISTSTYLE ALL로 변경
테이블을 DISTSTYLE ALL로 변경

다음 예에서는 테이블을 DISTSTYLE ALL로 변경하는 방법을 보여 줍니다.

EVEN 배포 스타일의 테이블을 생성합니다. SVV\$1TABLE\$1INFO 보기는 DISTSTYLE이 EVEN임을 보여 줍니다.

```
create table inventory(
  inv_date_sk int4 not null ,
  inv_item_sk int4 not null ,
  inv_warehouse_sk int4 not null ,
  inv_quantity_on_hand int4
) diststyle even;

Insert into inventory values(1,1,1,1);

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     EVEN
```

DISTSTYLE 테이블을 ALL로 변경합니다. SVV\$1TABLE\$1INFO 보기에는 변경된 DISTSYTLE이 표시됩니다.

```
alter table inventory alter diststyle all;

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     ALL
```

## 테이블 SORTKEY 변경
테이블 SORTKEY 변경

복합 정렬 키가 있거나 정렬 키가 없도록 테이블을 변경할 수 있습니다.

다음 테이블 정의에서 테이블 `t1`은 인터리브 정렬 키로 정의됩니다.

```
create table t1 (c0 int, c1 int) interleaved sortkey(c0, c1);
```

다음 명령은 테이블을 인터리브 정렬 키에서 복합 정렬 키로 변경합니다.

```
alter table t1 alter sortkey(c0, c1);
```

다음 명령은 인터리브 정렬 키를 제거하도록 테이블을 변경합니다.

```
alter table t1 alter sortkey none;
```

다음 테이블 정의에서 테이블 `t1`은 정렬 키로 열 `c0`을 사용하여 정의됩니다.

```
create table t1 (c0 int, c1 int) sortkey(c0);
```

다음 명령은 테이블 `t1`을 복합 정렬 키로 변경합니다.

```
alter table t1 alter sortkey(c0, c1);
```

## 테이블을 ENCODE AUTO로 변경
테이블을 ENCODE AUTO로 변경

다음 예에서는 테이블을 ENCODE AUTO로 변경하는 방법을 보여줍니다.

이 예에 대한 테이블 정의는 다음과 같습니다. 열 `c0`은 인코딩 형식 AZ64로 정의되고 열 `c1`은 인코딩 형식 LZO로 정의됩니다.

```
create table t1(c0 int encode AZ64, c1 varchar encode LZO);
```

이 테이블의 경우 다음 문은 인코딩을 AUTO로 변경합니다.

```
alter table t1 alter encode auto;
```

다음 예에서는 ENCODE AUTO 설정을 제거하기 위해 테이블을 변경하는 방법을 보여줍니다.

이 예에 대한 테이블 정의는 다음과 같습니다. 테이블 열은 인코딩 없이 정의됩니다. 이 경우 인코딩은 ENCODE AUTO로 기본 설정됩니다.

```
create table t2(c0 int, c1 varchar);
```

이 테이블의 경우 다음 문은 c0 열의 인코딩을 LZO로 변경합니다. 테이블 인코딩이 더 이상 ENCODE AUTO로 설정되지 않습니다.

```
alter table t2 alter column c0 encode lzo;;
```

## 행 수준 보안 통제 변경
행 수준 보안 통제 변경

다음 명령은 테이블에 대해 RLS를 해제합니다.

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY OFF;
```

다음 명령은 테이블에 대해 RLS를 설정합니다.

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
```

다음 명령은 테이블에 대해 RLS를 활성화하고 데이터 공유를 통해 액세스할 수 있도록 합니다.

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES OFF;
```

다음 명령은 테이블에 대해 RLS를 활성화하고 데이터 공유를 통해 액세스할 수 없도록 합니다.

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES ON;
```

다음 명령은 테이블에 대해 RLS를 활성화하고 RLS 접속사 유형을 OR로 설정합니다.

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE OR;
```

다음 명령은 테이블에 대해 RLS를 활성화하고 RLS 접속사 유형을 AND로 설정합니다.

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE AND;
```

# ALTER EXTERNAL TABLE 예
ALTER EXTERNAL TABLE 예

다음 예시에서는 미국 동부(버지니아 북부) 리전(`us-east-1`) AWS 리전에 있는 Amazon S3 버킷과 [예제](r_CREATE_EXTERNAL_TABLE_examples.md)에서 CREATE TABLE에 대해 생성한 예시 테이블을 사용합니다. 이 외부 테이블 포함 파티션을 사용하는 방법에 대한 자세한 내용은 [Redshift Spectrum 외부 테이블 파티셔닝](c-spectrum-external-tables.md#c-spectrum-external-tables-partitioning) 섹션을 참조하세요.

다음 예에서는 SPECTRUM.SALES 외부 테이블의 numRows 테이블 속성을 170,000개 행으로 설정합니다.

```
alter table spectrum.sales
set table properties ('numRows'='170000');
```

다음 예에서는 SPECTRUM.SALES 외부 테이블의 위치를 변경합니다.

```
alter table spectrum.sales
set location 's3://redshift-downloads/tickit/spectrum/sales/';
```

다음 예에서는 SPECTRUM.SALES 외부 테이블의 형식을 Parquet로 변경합니다.

```
alter table spectrum.sales
set file format parquet;
```

다음 예에서는 테이블 SPECTRUM.SALES\$1PART에 대한 파티션을 한 개 추가합니다.

```
alter table spectrum.sales_part
add if not exists partition(saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/';
```

다음 예에서는 테이블 SPECTRUM.SALES\$1PART에 대한 파티션을 세 개 추가합니다.

```
alter table spectrum.sales_part add if not exists
partition(saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/'
partition(saledate='2008-02-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/'
partition(saledate='2008-03-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03/';
```

다음 예에서는 `saledate='2008-01-01''`를 포함한 파티션을 삭제하도록 SPECTRUM.SALES\$1PART를 변경합니다.

```
alter table spectrum.sales_part
drop partition(saledate='2008-01-01');
```

다음 예에서는 `saledate='2008-01-01'`을 포함한 파티션에 대한 Amazon S3 경로를 새로 설정합니다.

```
alter table spectrum.sales_part
partition(saledate='2008-01-01')
set location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01-01/';
```

다음 예에서는 `sales_date`의 이름을 `transaction_date`로 바꿉니다.

```
alter table spectrum.sales rename column sales_date to transaction_date;
```

다음 예에서는 열 매핑을 ORC(Optimized Row Columnar) 형식을 사용하는 외부 테이블의 위치 매핑으로 설정합니다.

```
alter table spectrum.orc_example
set table properties('orc.schema.resolution'='position');
```

다음 예에서는 열 매핑을 ORC 형식을 사용하는 외부 테이블의 이름 매핑으로 설정합니다.

```
alter table spectrum.orc_example
set table properties('orc.schema.resolution'='name');
```

# ALTER TABLE ADD 및 DROP COLUMN 예
ALTER TABLE ADD 및 DROP COLUMN 예

다음 예에서는 ALTER TABLE을 사용하여 기본 테이블 열을 추가한 다음에 삭제하는 방법과 종속 객체가 있는 열을 삭제하는 방법을 보여줍니다.

## 기본 열을 ADD한 다음 DROP
기본 열을 ADD한 다음 DROP

다음 예에서는 독립형 FEEDBACK\$1SCORE 열을 USERS 테이블에 추가합니다. 이 열에는 간단하게 정수만 포함되어 있는데, 이 열의 기본값은 NULL(피드백 점수 없음)입니다.

먼저, PG\$1TABLE\$1DEF 카탈로그 테이블을 쿼리하여 USERS 테이블의 스키마를 봅니다.

```
column        | type                   | encoding | distkey | sortkey
--------------+------------------------+----------+---------+--------
userid        | integer                | delta    | true    |       1
username      | character(8)           | lzo      | false   |       0
firstname     | character varying(30)  | text32k  | false   |       0
lastname      | character varying(30)  | text32k  | false   |       0
city          | character varying(30)  | text32k  | false   |       0
state         | character(2)           | bytedict | false   |       0
email         | character varying(100) | lzo      | false   |       0
phone         | character(14)          | lzo      | false   |       0
likesports    | boolean                | none     | false   |       0
liketheatre   | boolean                | none     | false   |       0
likeconcerts  | boolean                | none     | false   |       0
likejazz      | boolean                | none     | false   |       0
likeclassical | boolean                | none     | false   |       0
likeopera     | boolean                | none     | false   |       0
likerock      | boolean                | none     | false   |       0
likevegas     | boolean                | none     | false   |       0
likebroadway  | boolean                | none     | false   |       0
likemusicals  | boolean                | none     | false   |       0
```

이제 feedback\$1score 열을 추가합니다.

```
alter table users
add column feedback_score int
default NULL;
```

USERS에서 FEEDBACK\$1SCORE 열을 선택하여 열이 추가되었는지 확인합니다.

```
select feedback_score from users limit 5;

feedback_score
----------------
NULL
NULL
NULL
NULL
NULL
```

열을 삭제하여 원래 DDL을 복구합니다.

```
alter table users drop column feedback_score;
```

## 종속 객체가 있는 열 삭제
종속 객체가 있는 열 삭제

다음 예에서는 종속 객체가 있는 열을 삭제합니다. 결과적으로, 종속 객체도 삭제됩니다.

시작하려면 FEEDBACK\$1SCORE 열을 USERS 테이블에 다시 추가합니다.

```
alter table users
add column feedback_score int
default NULL;
```

다음으로, USERS\$1VIEW라는 USERS 테이블에서 뷰를 생성합니다.

```
create view users_view as select * from users;
```

이제, FEEDBACK\$1SCORE 열을 USERS 테이블에서 삭제해 봅니다. 다음 DROP 문에서는 기본 동작(RESTRICT)을 사용합니다.

```
alter table users drop column feedback_score;
```

다른 객체가 이 열에 종속되어 있으므로 Amazon Redshift가 이 열을 삭제할 수 없다는 오류 메시지를 표시합니다.

이번에는 모든 종속 객체를 삭제하도록 CASCADE를 지정하여 FEEDBACK\$1SCORE 열을 다시 삭제해 봅니다.

```
alter table users
drop column feedback_score cascade;
```