ALTER TABLE
적용 대상: Databricks SQL Databricks Runtime
테이블의 스키마 또는 속성을 변경합니다.
Delta Lake에서 형식 변경이나 열 이름 바꾸기는 데이터 다시 쓰기를 참조하세요.
테이블에 대한 설명을 변경하기 위해 COMMENT ON을 사용할 수도 있습니다.
STREAMING TABLE
을 변경하려면 ALTER STREAMING TABLE을 사용합니다.
테이블이 캐시된 경우 명령은 테이블의 캐시된 데이터와 테이블을 참조하는 모든 종속 항목을 지웁니다. 다음에 테이블 또는 종속 항목에 액세스할 때는 캐시가 채워지는 시간이 지연됩니다.
참고 항목
기존 델타 테이블에 열을 추가하는 경우 DEFAULT
값을 정의할 수 없습니다. 델타 테이블에 추가된 모든 열은 기존 행에 대해 NULL
로 처리됩니다. 열을 추가한 후에는 필요에 따라 열의 기본값을 정의할 수 있지만 테이블에 삽입된 새 행에만 적용됩니다. 다음 구문을 사용합니다.
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_expression
외래 테이블에서는 ALTER TABLE SET OWNER
및 ALTER TABLE RENAME TO
만 수행할 수 있습니다.
필요한 사용 권한
Unity 카탈로그를 사용하는 경우 다음을 수행할 수 있는 MODIFY
권한이 있어야 합니다.
- ALTER COLUMN
- ADD COLUMN
- DROP COLUMN
- SET TBLPROPERTIES
- UNSET TBLPROPERTIES
- PREDICTIVE OPTIMIZATION 수정
다른 모든 작업에는 테이블의 소유권이 필요합니다.
구문
ALTER TABLE table_name
{ RENAME TO clause |
ADD COLUMN clause |
ALTER COLUMN clause |
DROP COLUMN clause |
RENAME COLUMN clause |
ADD CONSTRAINT clause |
DROP CONSTRAINT clause |
DROP FEATURE clause |
ADD PARTITION clause |
DROP PARTITION clause |
PARTITION SET LOCATION clause |
RENAME PARTITION clause |
RECOVER PARTITIONS clause |
SET { ROW FILTER clause } |
DROP ROW FILTER |
SET TBLPROPERTIES clause |
UNSET TBLPROPERTIES clause |
SET SERDE clause |
SET LOCATION clause |
SET OWNER TO clause |
SET SERDE clause |
SET TAGS clause |
UNSET TAGS clause |
CLUSTER BY clause }
PREDICTIVE OPTIMIZATION clause}
매개 변수
-
변경되는 테이블을 식별합니다. 이름에는 임시 사양이 포함되지 않아야 합니다. 테이블을 찾을 수 없는 경우 Azure Databricks는 TABLE_OR_VIEW_NOT_FOUND 오류를 발생시킵니다.
RENAME TO
to_table_name동일한 스키마 내에서 테이블의 이름을 바꿉니다.
-
새 테이블 이름을 식별합니다. 이름에는 임시 사양이 포함되지 않아야 합니다.
-
-
테이블에 하나 이상의 열을 추가합니다.
-
열의 위치나 속성을 변경합니다.
-
Delta Lake 테이블에서 하나 이상의 열 또는 필드를 삭제합니다.
-
Delta Lake 테이블의 열 또는 필드 이름을 바꿉니다.
-
검사 제약 조건, 정보용 외래 키 제약 조건 또는 정보용 기본 키 제약 조건을 테이블에 추가합니다.
외래 키 및 기본 키는
hive_metastore
카탈로그가 아닌 Unity 카탈로그의 테이블에만 지원됩니다. -
테이블에서 기본 키, 외래 키 또는 검사 제약 조건을 삭제합니다.
DROP FEATURE feature_name [ TRUNCATE HISTORY ]
적용 대상: Databricks SQL Databricks Runtime 14.1 이상
Delta Lake 테이블에서 기능을 제거합니다.
판독기와 작성기 모두에 영향을 미치는 기능을 제거하려면 다음 두 단계 프로세스가 필요합니다.
첫 번째 호출은 기능의 추적을 지우고 부분적인 성공을 알려줍니다.
그런 다음 보존 기간이 끝날 때까지 기다렸다가 문을 다시 실행하여 제거를 완료해야 합니다.
두 번째 호출을 너무 일찍 시작하는 경우 Azure Databricks는 DELTA_FEATURE_DROP_WAIT_FOR_RETENTION_PERIOD 또는 DELTA_FEATURE_DROP_HISTORICAL_VERSIONS_EXIST를 발생시킵니다.
자세한 내용은 테이블 기능이란?을 참조하세요.
feature_name
Azure Databricks에서 이해하고 테이블에서 지원되어야 하는
STRING
리터럴 또는 식별자 형식의 기능 이름입니다.지원되는
feature_names
는 다음과 같습니다.- 'deletionVectors' 또는
deletionvectors
- 'v2Checkpoint' 또는
v2checkpoint
- 'v2Checkpoint' 또는
이 기능이 테이블에 없는 경우 Azure Databricks는 DELTA_FEATURE_DROP_FEATURE_NOT_PRESENT를 발생시킵니다.
- 'deletionVectors' 또는
기록 자르기
필요에 따라 호출 명령이 실행될 때 테이블 기록이 잘려서 24시간 후에 판독기 +-기록기 기능을 삭제하는 두 번째 단계를 시작할 수 있습니다.
테이블 기록이 잘리면 DESCRIBE HISTORY를 수행하고 시간 이동 쿼리를 실행하는 기능이 제한됩니다.
-
테이블에 하나 이상의 파티션을 추가합니다.
-
테이블에서 하나 이상의 파티션을 삭제합니다.
-
파티션의 위치를 설정합니다.
-
파티션의 키를 바꿉니다.
-
테이블의 위치를 검사하고 파일 시스템에 직접 추가된 테이블에 파일을 추가하도록 Azure Databricks에 지시합니다.
SET
행 필터 절적용 대상: Databricks SQL Databricks Runtime 12.2 LTS 이상 Unity 카탈로그만
테이블에 행 필터 함수를 추가합니다. 해당 테이블로 모든 후속 쿼리는 함수가 부울 TRUE로 평가되는 행의 하위 집합을 수신합니다. 이는 함수가 특정 행을 필터링할지 여부를 결정하기 위해 호출하는 사용자의 ID 및/또는 그룹 구성원을 검사할 수 있는 세분화된 액세스 제어 목적에 유용할 수 있습니다.
DROP ROW FILTER
적용 대상: Unity 카탈로그만
테이블에서 행 필터를 삭제합니다(있는 경우). 이후 쿼리는 자동 필터링 없이 테이블의 모든 행을 반환합니다.
-
하나 이상의 사용자 정의 속성을 설정 또는 다시 설정합니다.
-
사용자 정의 속성을 하나 이상 제거합니다.
SET LOCATION
테이블의 위치를 이동합니다.
SET LOCATION path
LOCATION path
path
는STRING
리터럴이어야 합니다. 테이블의 새 위치를 지정합니다.원래 위치의 파일은 새 위치로 이동되지 않습니다.
[ SET ] OWNER TO
principal테이블의 소유권을
principal
로 이전합니다.적용 대상: Databricks SQL Databricks Runtime 11.3 LTS 이상
SET
는 선택적 키워드로 허용됩니다.SET TAGS ( { tag_name = tag_value } [, ...] )
적용 대상: Databricks SQL Databricks Runtime 13.3 LTS 이상
테이블에 태그를 적용합니다. 테이블에 태그를 추가할 수 있는
APPLY TAG
권한이 있어야 합니다.tag_name
리터럴
STRING
입니다.tag_name
은 테이블 또는 열 내에서 고유해야 합니다.tag_value
리터럴
STRING
입니다.
UNSET TAGS ( tag_name [, ...] )
적용 대상: Databricks SQL Databricks Runtime 13.3 LTS 이상
테이블에서 태그를 제거합니다. 테이블에서 태그를 제거할 수 있는
APPLY TAG
권한이 있어야 합니다.tag_name
리터럴
STRING
입니다.tag_name
은 테이블 또는 열 내에서 고유해야 합니다.
-
적용 대상: Databricks SQL Databricks Runtime 13.3 LTS 이상
Delta Lake 테이블에 대한 클러스터링 전략을 추가, 변경 또는 삭제합니다.
{ ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION
적용 대상: Databricks SQL Databricks Runtime 12.2 LTS 이상 Unity 카탈로그만
Important
이 기능은 공개 미리 보기 상태입니다.
관리형 Delta Lake 테이블을 원하는 예측 최적화 설정으로 변경합니다.
기본적으로 테이블이 만들어지면 동작은 스키마에서의
INHERIT
입니다.예측 최적화가 명시적으로 활성화되거나 활성화된 OPTIMIZE로 상속되는 경우 VACUUM은 Azure Databricks에서 적절한 것으로 간주하여 테이블에서 자동으로 호출됩니다. 자세한 내용은 Unity 카탈로그 관리 테이블에 대한 예측 최적화를 참조하세요.
예제
Delta Lake 추가 제약 조건 및 변경 열 예는 다음을 참조하세요.
-- RENAME table
> DESCRIBE student;
col_name data_type comment
----------------------- --------- -------
name string NULL
rollno int NULL
age int NULL
# Partition Information
# col_name data_type comment
age int NULL
> ALTER TABLE Student RENAME TO StudentInfo;
-- After Renaming the table
> DESCRIBE StudentInfo;
col_name data_type comment
----------------------- --------- -------
name string NULL
rollno int NULL
age int NULL
# Partition Information
# col_name data_type comment
age int NULL
-- RENAME partition
> SHOW PARTITIONS StudentInfo;
partition
---------
age=10
age=11
age=12
> ALTER TABLE default.StudentInfo PARTITION (age='10') RENAME TO PARTITION (age='15');
-- After renaming Partition
> SHOW PARTITIONS StudentInfo;
partition
---------
age=11
age=12
age=15
-- Add new columns to a table
> DESCRIBE StudentInfo;
col_name data_type comment
----------------------- --------- -------
name string NULL
rollno int NULL
age int NULL
# Partition Information
# col_name data_type comment
age int NULL
> ALTER TABLE StudentInfo ADD columns (LastName string, DOB timestamp);
-- After Adding New columns to the table
> DESCRIBE StudentInfo;
col_name data_type comment
----------------------- --------- -------
name string NULL
rollno int NULL
LastName string NULL
DOB timestamp NULL
age int NULL
# Partition Information
# col_name data_type comment
age int NULL
-- Add a new partition to a table
> SHOW PARTITIONS StudentInfo;
partition
---------
age=11
age=12
age=15
> ALTER TABLE StudentInfo ADD IF NOT EXISTS PARTITION (age=18);
-- After adding a new partition to the table
> SHOW PARTITIONS StudentInfo;
partition
---------
age=11
age=12
age=15
age=18
-- Drop a partition from the table
> SHOW PARTITIONS StudentInfo;
partition
---------
age=11
age=12
age=15
age=18
> ALTER TABLE StudentInfo DROP IF EXISTS PARTITION (age=18);
-- After dropping the partition of the table
> SHOW PARTITIONS StudentInfo;
partition
---------
age=11
age=12
age=15
-- Adding multiple partitions to the table
> SHOW PARTITIONS StudentInfo;
partition
---------
age=11
age=12
age=15
> ALTER TABLE StudentInfo ADD IF NOT EXISTS PARTITION (age=18) PARTITION (age=20);
-- After adding multiple partitions to the table
> SHOW PARTITIONS StudentInfo;
partition
---------
age=11
age=12
age=15
age=18
age=20
-- ALTER or CHANGE COLUMNS
> DESCRIBE StudentInfo;
col_name data_type comment
+-----------------------+---------+-------
name string NULL
rollno int NULL
LastName string NULL
DOB timestamp NULL
age int NULL
# Partition Information
# col_name data_type comment
age int NULL
ALTER TABLE StudentInfo ALTER COLUMN name COMMENT "new comment";
--After ALTER or CHANGE COLUMNS
> DESCRIBE StudentInfo;
col_name data_type comment
----------------------- --------- -----------
name string new comment
rollno int NULL
LastName string NULL
DOB timestamp NULL
age int NULL
# Partition Information
# col_name data_type comment
age int NULL
-- RENAME COLUMN
> ALTER TABLE StudentInfo RENAME COLUMN name TO FirstName;
--After RENAME COLUMN
> DESCRIBE StudentInfo;
col_name data_type comment
----------------------- --------- -----------
FirstName string new comment
rollno int NULL
LastName string NULL
DOB timestamp NULL
age int NULL
# Partition Information
# col_name data_type comment
age int NULL
-- Change the file Location
> ALTER TABLE dbx.tab1 PARTITION (a='1', b='2') SET LOCATION '/path/to/part/ways';
-- SET SERDE/ SERDE Properties (DBR only)
> ALTER TABLE test_tab SET SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe';
> ALTER TABLE dbx.tab1 SET SERDE 'org.apache.hadoop' WITH SERDEPROPERTIES ('k' = 'v', 'kay' = 'vee');
-- SET TABLE PROPERTIES
> ALTER TABLE dbx.tab1 SET TBLPROPERTIES ('winner' = 'loser');
-- DROP TABLE PROPERTIES
> ALTER TABLE dbx.tab1 UNSET TBLPROPERTIES ('winner');
-- Drop the "deletion vectors" from a Delta table
> ALTER TABLE my_table DROP FEATURE deletionVectors;
-- 24 hours later
> ALTER TABLE my_table DROP FEATURE deletionVectors TRUNCATE HISTORY;
-- Applies three tags to the table named `test`.
> ALTER TABLE test SET TAGS ('tag1' = 'val1', 'tag2' = 'val2', 'tag3' = 'val3');
-- Removes three tags from the table named `test`.
> ALTER TABLE test UNSET TAGS ('tag1', 'tag2', 'tag3');
-- Applies three tags to table `main.schema1.test` column `col1`.
> ALTER TABLE main.schema1.test ALTER COLUMN col1 SET TAGS ('tag1' = 'val1', 'tag2' = 'val2', 'tag3' = 'val3');
-- Removes three tags from table `main.schema1.test` column `col1`.
> ALTER TABLE main.schema1.test ALTER COLUMN col1 UNSET TAGS ('tag1', 'tag2', 'tag3');
-- Enables predictive optimization for my_table
> ALTER TABLE my_table ENABLE PREDICTIVE OPTIMIZATION;