ALTER TABLE
ALTER TABLE
기존 테이블의 정의를 바꿀 때 쓰는 명령어예요. 이름 변경, 컬럼 추가·삭제·이름 변경·타입 변경, 소유자 변경, 속성 설정, 테이블 명령 실행까지 한 명령으로 처리할 수 있어요.
출처: 문서
본문
Synopsis
ALTER TABLE [ IF EXISTS ] name RENAME TO new_name
ALTER TABLE [ IF EXISTS ] name ADD COLUMN [ IF NOT EXISTS ] column_name data_type
[ DEFAULT default ] [ NOT NULL ] [ COMMENT comment ]
[ WITH ( property_name = expression [, ...] ) ]
[ FIRST | LAST | AFTER after_column_name ]
ALTER TABLE [ IF EXISTS ] name DROP COLUMN [ IF EXISTS ] column_name
ALTER TABLE [ IF EXISTS ] name RENAME COLUMN [ IF EXISTS ] old_name TO new_name
ALTER TABLE [ IF EXISTS ] name ALTER COLUMN column_name SET DEFAULT expression
ALTER TABLE [ IF EXISTS ] name ALTER COLUMN column_name DROP DEFAULT
ALTER TABLE [ IF EXISTS ] name ALTER COLUMN column_name SET DATA TYPE new_type
ALTER TABLE [ IF EXISTS ] name ALTER COLUMN column_name DROP NOT NULL
ALTER TABLE name SET AUTHORIZATION ( user | USER user | ROLE role )
ALTER TABLE name SET PROPERTIES property_name = expression [, ...]
ALTER TABLE name EXECUTE command [ ( parameter => expression [, ... ] ) ]
[ WHERE expression ]
Description
기존 테이블의 정의를 변경해요.
테이블 이름 앞에 오는 선택적 IF EXISTS 절은 테이블이 존재하지 않을 때 오류를 무시해요.
컬럼 이름 앞에 오는 선택적 IF EXISTS 절은 컬럼이 존재하지 않을 때 오류를 무시해요.
선택적 IF NOT EXISTS 절은 컬럼이 이미 존재할 때 오류를 무시해요.
SET PROPERTIES
ALTER TABLE SET PROPERTIES 문장 뒤에 property_name과 expression 쌍을 나열하면 지정한 속성과 값을 테이블에 적용해요. 이미 설정된 속성을 이 문장에서 생략하면 그 속성은 테이블에서 그대로 유지돼요.
SET PROPERTIES 문장의 속성은 DEFAULT로 설정할 수 있는데, 이는 그 테이블에서 값을 기본값으로 되돌려요.
모든 커넥터가 테이블 속성 수정을 지원하지 않으므로 ALTER TABLE SET PROPERTIES 지원 여부는 커넥터마다 달라요.
EXECUTE
ALTER TABLE EXECUTE 문장 뒤에 명령과 파라미터를 붙이면 지정한 명령과 파라미터에 따라 테이블을 수정해요. ALTER TABLE EXECUTE는 커넥터별로 다른 명령을 지원해요.
=> 연산자를 사용하면 이름 있는 파라미터 값을 전달할 수 있어요. 왼쪽은 파라미터 이름, 오른쪽은 전달할 값이에요.
실행 가능한 명령은 커넥터가 제공해요. 예를 들어 Hive, Delta Lake, Iceberg 커넥터가 제공하는 optimize 명령이 대표적이에요. 예를 들어 example 카탈로그의 test 스키마에 있는 test_table이라는 테이블의 저장소에 작은 파일이 많다고 관찰되었다면, optimize 명령으로 file_size_threshold 값 아래의 모든 파일을 병합할 수 있어요. 결과는 더 적지만 더 큰 파일이 되며, 보통 파일 안의 데이터에 대한 쿼리 성능이 높아져요:
ALTER TABLE example.test.test_table EXECUTE optimize(file_size_threshold => '16MB')
Examples
users 테이블의 이름을 people로 바꾸려면:
ALTER TABLE users RENAME TO people;
users 테이블이 존재한다면 이름을 people로 바꾸려면:
ALTER TABLE IF EXISTS users RENAME TO people;
users 테이블에 컬럼 zip을 추가하려면:
ALTER TABLE users ADD COLUMN zip varchar;
기본값 90210을 가진 컬럼 zip을 users 테이블에 추가하려면:
ALTER TABLE users ADD COLUMN zip varchar DEFAULT '90210';
users 테이블이 존재하고 zip 컬럼이 없다면 이를 추가하려면:
ALTER TABLE IF EXISTS users ADD COLUMN IF NOT EXISTS zip varchar;
users 테이블의 첫 번째 컬럼으로 id를 추가하려면:
ALTER TABLE users ADD COLUMN id varchar FIRST;
users 테이블의 country 컬럼 뒤에 zip 컬럼을 추가하려면:
ALTER TABLE users ADD COLUMN zip varchar AFTER country;
users 테이블에서 zip 컬럼을 제거하려면:
ALTER TABLE users DROP COLUMN zip;
users 테이블과 zip 컬럼이 존재한다면 이를 제거하려면:
ALTER TABLE IF EXISTS users DROP COLUMN IF EXISTS zip;
users 테이블에서 컬럼 id의 이름을 user_id로 바꾸려면:
ALTER TABLE users RENAME COLUMN id TO user_id;
users 테이블과 id 컬럼이 존재한다면 이름을 user_id로 바꾸려면:
ALTER TABLE IF EXISTS users RENAME column IF EXISTS id to user_id;
users 테이블에서 컬럼 id의 타입을 bigint로 변경하려면:
ALTER TABLE users ALTER COLUMN id SET DATA TYPE bigint;
users 테이블의 id 컬럼에서 not null 제약을 제거하려면:
ALTER TABLE users ALTER COLUMN id DROP NOT NULL;
people 테이블의 소유자를 사용자 alice로 변경하려면:
ALTER TABLE people SET AUTHORIZATION alice
public 롤을 가진 모든 사용자가 people 테이블을 삭제·수정할 수 있게 하려면:
ALTER TABLE people SET AUTHORIZATION ROLE PUBLIC
people 테이블에 테이블 속성(x = y)을 설정하려면:
ALTER TABLE people SET PROPERTIES x = 'y';
people 테이블에 여러 테이블 속성(foo = 123과 foo bar = 456)을 설정하려면:
ALTER TABLE people SET PROPERTIES foo = 123, "foo bar" = 456;
people 테이블에서 테이블 속성 x를 기본값으로 되돌리려면:
ALTER TABLE people SET PROPERTIES x = DEFAULT;
See also
CREATE TABLE 명령과 함께 사용해요.
더 알아보기 (Learn more)
테이블을 만드는 CREATE TABLE과 제거하는 DROP TABLE도 함께 확인해 보세요.