ALTER 문

ALTER 문 (ALTER Statements)

Hive dialect에서는 현재 다음과 같은 ALTER 문을 지원합니다:

  • ALTER DATABASE
  • ALTER TABLE
  • ALTER VIEW

출처: 문서

본문

ALTER DATABASE

설명

ALTER DATABASE 문은 데이터베이스의 속성이나 위치를 변경하는 데 사용됩니다.

문법

-- 데이터베이스 속성 변경
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...);

-- 데이터베이스 위치 변경
ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path;

요약 (Synopsis)

  • SCHEMADATABASE의 사용은 서로 바꿔 쓸 수 있습니다 — 같은 의미입니다.
  • ALTER DATABASE .. SET LOCATION 문은 Hive-2.4.0 이상에서만 지원됩니다. 이 문은 데이터베이스의 현재 디렉토리 내용을 새 위치로 이동하지 않습니다. 지정된 데이터베이스 아래의 테이블/파티션과 연관된 위치도 변경하지 않습니다. 오직 이 데이터베이스에 새 테이블이 추가될 기본 상위 디렉토리만 변경합니다. 이는 테이블 디렉토리를 변경해도 기존 파티션이 다른 위치로 이동하지 않는 것과 유사한 동작입니다.

예제

-- 데이터베이스 속성 변경
ALTER DATABASE d1 SET DBPROPERTIES ('p1' = 'v1', 'p2' = 'v2');

-- 데이터베이스 위치 변경
ALTER DATABASE d1 SET LOCATION '/new/path';

ALTER TABLE

설명

ALTER TABLE 문은 테이블의 스키마나 속성을 변경합니다.

테이블 이름 바꾸기 (Rename Table)

RENAME TABLE 문은 사용자가 테이블의 이름을 다른 이름으로 바꿀 수 있게 합니다.

ALTER TABLE table_name RENAME TO new_table_name;

-- 예제
ALTER TABLE t1 RENAME TO t2;

테이블 속성 변경 (Alter Table Properties)

ALTER TABLE PROPERTIES 문은 사용자가 테이블에 자신의 메타데이터를 추가할 수 있게 합니다. 현재 last_modified_user, last_modified_time 속성은 Hive에 의해 자동으로 추가되고 관리됩니다.

ALTER TABLE table_name SET TBLPROPERTIES table_properties;

table_properties:
  : (property_name = property_value, property_name = property_value, ... )

-- 예제
ALTER TABLE t1 SET TBLPROPERTIES ('p1' = 'v1', 'p2' = 'v2');

SerDe 속성 추가/제거 (Add / Remove SerDe Properties)

이 문은 사용자가 테이블의 SerDe를 변경하거나 사용자 정의 메타데이터를 테이블의 SerDe 객체에 추가/이동할 수 있게 합니다. SerDe 속성은 데이터를 직렬화/역직렬화하기 위해 테이블의 SerDe에 전달됩니다. 따라서 사용자는 자신의 사용자 정의 SerDe에 필요한 정보를 여기에 저장할 수 있습니다. 자세한 내용은 Hive의 SerDe docsHive SerDe를 참고하세요.

SerDe 속성 추가:

ALTER TABLE table_name [PARTITION partition_spec] SET SERDE serde_class_name [WITH SERDEPROPERTIES serde_properties];
ALTER TABLE table_name [PARTITION partition_spec] SET SERDEPROPERTIES serde_properties;

serde_properties:
  : (property_name = property_value, property_name = property_value, ... )

SerDe 속성 제거:

ALTER TABLE table_name [PARTITION partition_spec] UNSET SERDEPROPERTIES (property_name, ... );

예제:

-- serde 속성 추가
ALTER TABLE t1 SET SERDEPROPERTIES ('field.delim' = ',');

-- serde 속성 제거
ALTER TABLE t1 UNSET SERDEPROPERTIES ('field.delim');

파티션 변경 (Alter Partition)

ALTER TABLE ... PARTITION .. 문은 파티션을 추가/이름 변경/삭제하는 데 사용됩니다.

파티션 추가 (Add Partitions)

ALTER TABLE .. ADD PARTITION 문은 파티션을 추가하는 데 사용됩니다. 파티션 값은 문자열일 때만 따옴표로 감싸야 합니다. 위치는 데이터 파일이 들어 있는 디렉토리여야 합니다. (ADD PARTITION은 테이블 메타데이터를 변경하지만 데이터를 로드하지는 않습니다. 파티션의 위치에 데이터가 없으면 쿼리는 결과를 반환하지 않습니다.) 테이블에 대한 partition_spec이 이미 존재하면 오류가 발생합니다. IF NOT EXISTS를 사용해 오류를 건너뛸 수 있습니다.

ALTER TABLE table_name ADD [IF NOT EXISTS]
 PARTITION partition_spec [LOCATION 'location']
 [, PARTITION partition_spec [LOCATION 'location'], ...];
partition_spec:
  : (partition_column = partition_col_value, partition_column = partition_col_value, ...)

-- 예제
ALTER TABLE t1 ADD PARTITION (dt='2022-08-08', country='china') location '/path/to/us/part080808'
                   PARTITION (dt='2022-08-09', country='china') location '/path/to/us/part080809';

파티션 이름 변경 (Rename Partitions)

ALTER TABLE .. PARTITION ... RENAME TO ... 문은 파티션 이름을 바꾸는 데 사용됩니다.

ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;

-- 예제
ALTER TABLE t1 PARTITION (dt='2022-08-08', country='china')
     RENAME TO PARTITION (dt='2023-08-08', country='china');

파티션 삭제 (Drop Partitions)

ALTER TABLE .. DROP PARTITION ... 문은 파티션을 삭제하는 데 사용됩니다. 이는 이 파티션의 데이터와 메타데이터를 제거합니다. Trash가 구성되어 있으면 데이터는 실제로 .Trash/Current 디렉토리로 이동하지만, 메타데이터는 완전히 손실됩니다.

ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]

-- 예제
ALTER TABLE t1 DROP IF EXISTS PARTITION (dt='2022-08-08', country='china');

위치/파일 포맷 변경 (Alter Location / File Format)

ALTER TABLE SET 명령은 기존 테이블의 파일 위치와 파일 포맷을 변경하는 데에도 사용할 수 있습니다.

-- 파일 위치 변경
ALTER TABLE table_name [PARTITION partition_spec] SET LOCATION "new location";

-- 파일 포맷 변경
ALTER TABLE table_name [PARTITION partition_spec] SET FILEFORMAT file_format;

-- 예제
ALTER TABLE t1 PARTITION (dt='2022-08-08', country='china') SET LOCATION "/user/warehouse/t2/dt=2022-08-08/country=china";

ALTER TABLE t1 PARTITION (dt='2022-08-08', country='china') SET FILEFORMAT ORC;

열 변경 (Alter Column)

열 이름 규칙 (Rules for Column Names)

열 이름은 대소문자를 구분하지 않습니다. 백틱 인용은 열 이름뿐 아니라 테이블 이름에도 예약 키워드를 사용할 수 있게 합니다.

열 정의 변경 (Change Column's Definition)

이 문은 사용자가 열의 이름, 데이터 타입, 주석, 위치 또는 그 임의 조합을 변경할 수 있게 합니다.

ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type
  [COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];

-- 예제
ALTER TABLE t1 CHANGE COLUMN c1 new_c1 STRING FIRST;
ALTER TABLE t1 CHANGE COLUMN c1 new_c1 STRING AFRER c2;

열 추가/교체 (Add/Replace Columns)

이 문은 사용자가 새 열을 추가하거나 기존 열을 새 열로 교체할 수 있게 합니다.

ALTER TABLE table_name
  [PARTITION partition_spec]
  ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
  [CASCADE|RESTRICT]

ADD COLUMNS는 파티션 열 앞에, 기존 열 끝에 새 열을 추가합니다. REPLACE COLUMNS는 기존 열을 모두 제거하고 새 열 집합을 추가합니다.

ALTER TABLE ... COLUMNSCASCADE를 함께 사용하면 테이블 메타데이터의 열을 변경하고 같은 변경을 모든 파티션 메타데이터로 전파합니다. RESTRICT가 기본값이며 열 변경을 테이블 메타데이터로만 제한합니다.

-- 열 추가
ALTER TABLE t1 ADD COLUMNS (ch CHAR(5), name STRING) CASCADE;

-- 열 교체
ALTER TABLE t1 REPLACE COLUMNS (t1 TINYINT, d DECIMAL) CASCADE;

ALTER VIEW

뷰 속성 변경 (Alter View Properties)

ALTER VIEW ... SET TBLPROPERTIES ..는 뷰에 사용자 자신의 메타데이터를 추가할 수 있게 합니다.

ALTER VIEW [db_name.]view_name SET TBLPROPERTIES table_properties;

table_properties:
  : (property_name = property_value, property_name = property_value, ...)

-- 예제
ALTER VIEW v1 SET TBLPROPERTIES ('p1' = 'v1');

뷰 재정의 (Alter View As Select)

ALTER VIEW ... AS ..는 반드시 존재해야 하는 뷰의 정의를 변경할 수 있게 합니다.

ALTER VIEW [db_name.]view_name AS select_statement;

-- 예제
ALTER VIEW v1 AS SELECT * FROM t2;

더 알아보기 (Learn more)