IT Log

ALTER TABLE/COLUMN & PARTITION 본문

SQL/Hive(HiveQL)

ALTER TABLE/COLUMN & PARTITION

newly0513 2021. 3. 24. 16:31
728x90
반응형

ALTER TABLE

-- ALTER TABLE NAME 
ALTER TABLE table_name RENAME TO new_table_name;

-- ALTER TABLE PROPERTIES
ALTER TABLE table_name SET TBLPROPERTIES table_properties;

 

ALTER TABLE 예시

-- 가장 평범한 예시
ALTER TABLE hivetable RENAME TO newtable;
-- dt파티션이 2020-01-01인 값의 행만 TRUNCATE
ALTER TABLE hivetable SET TBLPROPERTIES ('comment'='테이블 변경');

ALTER COLUMN

COLUMN 이름/유형/위치/설명 변경

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];
  • partition_spec : (partition_column = partition_col_value, partition_column = partition_col_value, ...)

 

COLUMN 이름/유형/위치/설명 변경 예시

-- id컬럼을 user_id로 변경
ALTER TABLE hivetable CHANGE id user_id INT;

-- 변경한 컬럼을 name컬럼 뒤로 위치
ALTER TABLE hivetable CHANGE id user_id INT AFTER name;

-- 변경한 컬럼을 첫번째 컬럼으로 지정
ALTER TABLE hivetable CHANGE id user_id INT FIRST;

 

COLUMN 추가 변경

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

 

COLUMN 추가 변경 예시

-- address 컬럼 추가
ALTER TABLE hivetable ADD COLUMNS (address stirng);

-- 모든 열을 제거하고 새롭게 변경
-- 기존 컬럼이 id와 name이라는 가정하면 id 컬럼은 사라진다.
ALTER TABLE hivetable REPLACE COLUMNS (name string, address stirng);

PARTITION

파티션 추가

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, ...)

 

파티션 복구

MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];

 

파티션 삭제

ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]
  [IGNORE PROTECTION] [PURGE];  

 

파티션 이름 변경

ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;

 

파티션 변경

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

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

-- 터치 변경
ALTER TABLE table_name TOUCH [PARTITION partition_spec];

-- 보호 변경
ALTER TABLE table_name [PARTITION partition_spec] ENABLE|DISABLE NO_DROP [CASCADE];  
ALTER TABLE table_name [PARTITION partition_spec] ENABLE|DISABLE OFFLINE;

-- 컴팩트 변경
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])]
  COMPACT 'compaction_type'[AND WAIT]
  [WITH OVERWRITE TBLPROPERTIES ("property"="value" [, ...])];
  
-- 연결 변경
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] CONCATENATE;

-- 업데이트 열 변경
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] UPDATE COLUMNS;

 

파티션 교환

-- table_name_1 파티션을 table_name_2로 이동
ALTER TABLE table_name_2 EXCHANGE PARTITION (partition_spec) WITH TABLE table_name_1;

-- 여러개인 경우
ALTER TABLE table_name_2 EXCHANGE PARTITION (partition_spec, partition_spec2, ...) WITH TABLE table_name_1;
728x90
반응형

'SQL > Hive(HiveQL)' 카테고리의 다른 글

CREATE/DROP/TRUNCATE TABLE  (0) 2021.03.24
CREATE/DROP/ALTER DATABASE  (0) 2021.03.24
SELECT  (0) 2021.03.24
Show  (0) 2021.02.09
Comments