다음을 통해 공유


ALTER TABLE

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

schema 또는 table의 속성을 변경합니다.

Delta Lake에서 형식을 변경하거나 의 이름을 바꾸려면 데이터다시 쓰기를 참조하세요.

table 또는 column주석을 변경하려면 COMMENT ON사용할 수도 있습니다.

STREAMING TABLE변경하려면 ALTER STREAMING TABLE사용합니다.

table 캐시된 경우 명령은 table 캐시된 데이터와 해당 데이터를 참조하는 모든 종속 데이터를 지웁니다. 다음에 table 또는 종속 항목에 액세스할 때 캐시가 느리게 채워집니다.

참고 항목

기존 Delta table에 column를 추가하는 경우, DEFAULT 값을 정의할 수 없습니다. Delta tables에 추가된 모든 columns는 기존 행에 대해 NULL로 처리됩니다. column추가한 후에는 필요에 따라 column기본값을 정의할 수 있지만 table삽입된 새 행에만 적용됩니다. 다음 구문을 사용합니다.

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_expression

외부 tables에서는 ALTER TABLE SET OWNERALTER TABLE RENAME TO만 수행할 수 있습니다.

필요한 사용 권한

Unity Catalog 사용하는 경우 다음을 수행할 MODIFY 권한이 있어야 합니다.

  • ALTER COLUMN
  • 추가 COLUMN
  • DROP COLUMN
  • SET TBLPROPERTIES
  • UNSET TBLPROPERTIES
  • PREDICTIVE OPTIMIZATION 수정

Unity Catalog을 사용하려면, 반드시 MANAGE 권한이나 소유권을 가지고 있어야 합니다.

  • SET 소유자에게

다른 모든 작업에는 table소유권이 필요합니다.

구문

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}

Parameters

  • table_name

    변경되는 table을 식별합니다. 이름에는 임시 사양 또는 옵션 사양이 포함되어서는 안됩니다. table을(를) 찾을 수 없는 상황에서 Azure Databricks는 TABLE_OR_VIEW_NOT_FOUND 오류를 발생시킵니다.

  • RENAME TO to_table_name

    동일한 schema내의 table 이름을 바꿉니다.

  • 추가 COLUMN

    table에 하나 이상의 columns을 추가합니다.

  • ALTER COLUMN

    속성이나 column의 위치를 변경합니다.

  • DROP COLUMN

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

  • 이름 바꾸기 COLUMN

    Delta Lake table의 column 또는 필드의 이름을 바꿉니다.

  • ADD CONSTRAINT

    검사 constraint, 정보 외래 키 constraint, 정보 기본 키 constraint를 table에 추가합니다.

    외래 키와 기본 키는 Unity Catalog의 tables에서는 지원되지만, hive_metastorecatalog에서는 지원되지 않습니다.

  • DROP CONSTRAINT

    기본 키, 외래 키를 삭제하거나 tableconstraint 확인합니다.

  • DROP FEATURE feature_name [ TRUNCATE HISTORY ]

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

    Delta Lake table기능을 제거합니다.

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

    table 기능이란 무엇인지 확인하세요. 자세한 내용은.

    • feature_name

      Azure Databricks에서 인식되고 table에서 지원되어야 하는, STRING 리터럴 또는 identifier형식으로 된 기능의 이름입니다.

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

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

      기능이 table에 존재하지 않는 경우, Azure Databricks는 DELTA_FEATURE_DROP_FEATURE_NOT_PRESENT를 발생시킵니다.

    • 기록 자르기

      선택적으로 호출 명령이 실행된 시점까지 table 기록을 트렁케이트하여, 24시간 후에 읽기-쓰기 기능을 삭제하는 두 번째 단계를 시작할 수 있습니다.

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

  • 추가 PARTITION

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

  • DROP PARTITION

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

  • PARTITION ... SET 위치

    partition위치를 설정합니다.

  • 이름 바꾸기 PARTITION

    partition키를 바꿉니다.

  • RECOVER PARTITIONS

    Azure Databricks에 table위치를 스캔하여, 파일 시스템에 직접 추가된 파일을 table에 추가하라고 명령합니다.

  • SET ROW FILTER 절

    적용 대상:확인 표시 예 Databricks SQL 확인 표시 예 Databricks Runtime 12.2 LTS 및 이상 확인 표시 예 Unity Catalog만

    table에 행 필터 함수를 추가합니다. table에 대한 모든 후속 쿼리는 함수가 부울 TRUE로 평가된 where 행의 하위 집합을 얻게 됩니다. 이는 함수가 호출하는 사용자의 ID 또는 그룹 멤버 자격을 검사하여 특정 행을 필터링할지 여부를 결정할 수 where 세분화된 액세스 제어 용도에 유용할 수 있습니다.

  • DROP ROW FILTER

    적용 대상:체크 표시 예 Unity만 Catalog

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

  • SET TBLPROPERTIES

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

  • UNSET TBLPROPERTIES

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

  • SET LOCATION

    table의 위치를 이동합니다.

    SET LOCATION path
    
    • LOCATION path

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

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

  • [ SET ] OWNER TO principal

    table의 소유권을 principal로 이전합니다.

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

    SET는 선택적 키워드로 허용됩니다.

  • SET TAGS ( { tag_name = tag_value } [, ...] )

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

    table태그를 적용합니다. table태그를 추가하려면 APPLY TAG 권한이 있어야 합니다.

    • tag_name

      리터럴 STRING입니다. tag_name table 또는 column내에서 고유해야 합니다.

    • tag_value

      리터럴 STRING입니다.

  • UNSET TAGS ( tag_name [, ...] )

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

    table태그를 Remove로 이동. APPLY TAG 권한이 있어야 table에서 remove 태그를 할 수 있습니다.

    • tag_name

      리터럴 STRING입니다. tag_name table 또는 column내에서 고유해야 합니다.

  • CLUSTER BY 절

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

    Delta Lake table대한 클러스터링 전략을 추가, 변경 또는 삭제합니다.

  • { ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION

    적용 대상:체크 표시 예 Databricks SQL 체크 표시됨 Databricks Runtime 12.2 LTS 이상 체크 표시됨 Unity Catalog만 표시됩니다.

    Important

    이 기능은 공개 미리 보기 상태입니다.

    관리형 Delta Lake table을 원하는 예측 최적화 설정으로 변경합니다.

    기본적으로 tables을 만들 때는 schema에서 INHERIT하는 것이 기본 동작입니다.

    예측 최적화가 명시적으로 활성화되거나 OPTIMIZE으로 활성화가 상속된 경우, Azure Databricks에서 적절하다고 판단하면 VACUUM과 table가 자동으로 호출됩니다. 자세한 내용은 Unity의 예측 최적화와 관련된 Catalog 관리 tables를 참조하세요.

예제

Delta Lake에서 제약 조건을 추가하고 column 예제들을 변경 및 수정하려면

-- 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;