다음을 통해 공유


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 OWNERALTER 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}

매개 변수

  • table_name

    변경되는 테이블을 식별합니다. 이름에는 임시 사양이 포함되지 않아야 합니다. 테이블을 찾을 수 없는 경우 Azure Databricks는 TABLE_OR_VIEW_NOT_FOUND 오류를 발생시킵니다.

  • RENAME TOto_table_name

    동일한 스키마 내에서 테이블의 이름을 바꿉니다.

  • ADD COLUMN

    테이블에 하나 이상의 열을 추가합니다.

  • ALTER COLUMN

    열의 위치나 속성을 변경합니다.

  • DROP COLUMN

    Delta Lake 테이블에서 하나 이상의 열 또는 필드를 삭제합니다.

  • RENAME COLUMN

    Delta Lake 테이블의 열 또는 필드 이름을 바꿉니다.

  • ADD CONSTRAINT

    검사 제약 조건, 정보용 외래 키 제약 조건 또는 정보용 기본 키 제약 조건을 테이블에 추가합니다.

    외래 키 및 기본 키는 hive_metastore 카탈로그가 아닌 Unity 카탈로그의 테이블에만 지원됩니다.

  • DROP CONSTRAINT

    테이블에서 기본 키, 외래 키 또는 검사 제약 조건을 삭제합니다.

  • DROP FEATURE feature_name [ TRUNCATE HISTORY ]

    적용 대상: 예로 표시된 확인 Databricks SQL 예로 표시된 확인 Databricks Runtime 14.1 이상

    Delta Lake 테이블에서 기능을 제거합니다.

    판독기와 작성기 모두에 영향을 미치는 기능을 제거하려면 다음 두 단계 프로세스가 필요합니다.

    자세한 내용은 테이블 기능이란?을 참조하세요.

    • feature_name

      Azure Databricks에서 이해하고 테이블에서 지원되어야 하는 STRING 리터럴 또는 식별자 형식의 기능 이름입니다.

      지원되는 feature_names는 다음과 같습니다.

      • 'deletionVectors' 또는 deletionvectors
        • 'v2Checkpoint' 또는 v2checkpoint

      이 기능이 테이블에 없는 경우 Azure Databricks는 DELTA_FEATURE_DROP_FEATURE_NOT_PRESENT를 발생시킵니다.

    • 기록 자르기

      필요에 따라 호출 명령이 실행될 때 테이블 기록이 잘려서 24시간 후에 판독기 +-기록기 기능을 삭제하는 두 번째 단계를 시작할 수 있습니다.

      테이블 기록이 잘리면 DESCRIBE HISTORY를 수행하고 시간 이동 쿼리를 실행하는 기능이 제한됩니다.

  • ADD PARTITION

    테이블에 하나 이상의 파티션을 추가합니다.

  • DROP PARTITION

    테이블에서 하나 이상의 파티션을 삭제합니다.

  • PARTITION … SET LOCATION

    파티션의 위치를 설정합니다.

  • RENAME PARTITION

    파티션의 키를 바꿉니다.

  • RECOVER PARTITIONS

    테이블의 위치를 검사하고 파일 시스템에 직접 추가된 테이블에 파일을 추가하도록 Azure Databricks에 지시합니다.

  • SET행 필터 절

    적용 대상: 예로 표시된 확인Databricks SQL 예로 표시된 확인 Databricks Runtime 12.2 LTS 이상 예로 표시된 확인 Unity 카탈로그만

    테이블에 행 필터 함수를 추가합니다. 해당 테이블로 모든 후속 쿼리는 함수가 부울 TRUE로 평가되는 행의 하위 집합을 수신합니다. 이는 함수가 특정 행을 필터링할지 여부를 결정하기 위해 호출하는 사용자의 ID 및/또는 그룹 구성원을 검사할 수 있는 세분화된 액세스 제어 목적에 유용할 수 있습니다.

  • DROP ROW FILTER

    적용 대상: 예로 표시된 확인 Unity 카탈로그만

    테이블에서 행 필터를 삭제합니다(있는 경우). 이후 쿼리는 자동 필터링 없이 테이블의 모든 행을 반환합니다.

  • SET TBLPROPERTIES

    하나 이상의 사용자 정의 속성을 설정 또는 다시 설정합니다.

  • UNSET TBLPROPERTIES

    사용자 정의 속성을 하나 이상 제거합니다.

  • SET LOCATION

    테이블의 위치를 이동합니다.

    SET LOCATION path
    
    • LOCATION path

      pathSTRING 리터럴이어야 합니다. 테이블의 새 위치를 지정합니다.

      원래 위치의 파일은 새 위치로 이동되지 않습니다.

  • [ SET ] OWNER TOprincipal

    테이블의 소유권을 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은 테이블 또는 열 내에서 고유해야 합니다.

  • CLUSTER BY 절

    적용 대상: 예로 표시된 확인 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;