다음을 통해 공유


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

Unity 카탈로그를 사용하는 경우 다음을 수행할 MANAGE 권한 또는 소유권이 있어야 합니다.

  • SET OWNER TO

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

구문

ALTER TABLE table_name
    { RENAME TO clause |
      ADD COLUMN clause |
      ALTER COLUMN clause |
      DROP COLUMN clause |
      RENAME COLUMN clause |
      DEFAULT COLLATION 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 TO to_table_name

    테이블 이름을 바꿉니다.

    • to_table_name

      새 테이블 이름을 식별합니다. 이름에는 임시 사양 또는 옵션 사양이 포함되어서는 안됩니다.

      Unity 카탈로그 테이블의 경우 이 테이블은 to_table_name .와 동일한 카탈로그 table_name내에 있어야 합니다. 다른 테이블의 경우 to_table_name은(는) table_name과 동일한 스키마 내에 있어야 합니다.

      정규화되지 않은 경우 to_table_name 현재 스키마를 사용하여 암시적으로 정규화됩니다.

  • 추가 COLUMN

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

  • ADD CONSTRAINT

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

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

  • DEFAULT COLLATION 정렬_이름

    적용 대상:확인 표시 예 Databricks SQL 확인 표시 예 Databricks Runtime 16.3 이상

    STRING 열에 대한 테이블의 기본 데이터 정렬을 변경합니다. 기존 열은 이 절의 영향을 받지 않습니다. 기존 열의 데이터 정렬을 변경하려면 ALTER TABLE ... ALTER COLUMN ... COLLATE collation_name사용합니다.

  • DROP CONSTRAINT

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

  • DROP FEATURE feature_name [ TRUNCATE HISTORY ]

    적용 대상:예로 확인 표시됨 Databricks Runtime 14.3 LTS 이상

    DROP FEATURE 지원은 Databricks Runtime 14.3 LTS부터 레거시로 사용할 수 있습니다. 레거시 기능에 대한 설명서는 Drop Delta 테이블 기능(레거시)을 참조하세요.

    적용 대상:확인 표시 예 Databricks SQL 확인 표시 예 Databricks Runtime 16.3 이상

  • Azure Databricks는 레거시 동작을 대체하는 모든 DROP FEATURE 명령에 Databricks Runtime 16.3 이상을 사용하는 것이 좋습니다.

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

    기능을 제거하면 테이블 프로토콜에 기록기 checkpointProtection 기능이 추가될 수 있습니다. 자세한 내용은 프로토콜 호환성에 대한Drop Delta 테이블 기능 및 테이블 기능을 참조하세요.

    • feature_name

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

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

    • 기록 단축

      기록을 축소하여 기능을 제거합니다. 이렇게 하려면 다음 두 단계 프로세스가 필요합니다.

기록을 잘라내어 기능을 제거하려면 2단계 프로세스가 필요합니다.

  • 첫 번째 호출은 기능의 추적을 지우고 부분적인 성공을 알려줍니다.

  • 그런 다음 보존 기간이 끝날 때까지 기다렸다가 문을 다시 실행하여 제거를 완료합니다.

    두 번째 호출을 너무 일찍 시작하는 경우 Azure Databricks는 DELTA_FEATURE_DROP_WAIT_FOR_RETENTION_PERIOD 또는 DELTA_FEATURE_DROP_HISTORICAL_VERSIONS_EXIST를 발생시킵니다.

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

  • 추가 PARTITION

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

  • 삭제 PARTITION

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

  • PARTITION ... SET 위치

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

  • 이름 바꾸기 PARTITION

    파티션의 키를 바꿉니다.

  • 파티션 복구

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

  • SET ROW FILTER 절

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

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

  • DROP ROW FILTER

    적용 대상:예로 체크 표시됨 Unity 카탈로그만

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

  • SET TBLPROPERTIES

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

  • 설정 취소 TBLPROPERTIES

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

  • SET LOCATION

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

    SET LOCATION path
    
    • LOCATION path

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

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

  • [ SET ] OWNER TO 교장

    테이블의 소유권을 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 카탈로그만 표시

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

    기본적으로 테이블이 만들어지면 스키마의 동작은 INHERIT로 설정됩니다.

    예측 최적화가 명시적으로 활성화되었거나 활성화된 것으로 상속된 경우, Azure Databricks가 적절하다고 판단할 때 테이블에서 OPTIMIZEVACUUM을 자동으로 호출합니다. 자세한 내용은 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;

-- Alter multiple columns in a single statement
-- Create a table with 3 columns
> CREATE TABLE my_table (num INT, str STRING, bool BOOLEAN) TBLPROPERTIES('delta.feature.allowColumnDefaults' = 'supported')
> DESCRIBE TABLE my_table;
  col_name    data_type     comment
  --------    ---------     -------
       num          int        null
       str       string        null
       bool      boolean       null

-- Update comments on multiple columns
> ALTER TABLE table ALTER COLUMN
   num COMMENT 'number column',
   str COMMENT 'string column';

> DESCRIBE TABLE my_table;
  col_name    data_type      comment
  --------    ---------   -------------
       num          int   number column
       str       string   string column
      bool      boolean            null

-- Can mix different types of column alter
> ALTER TABLE table ALTER COLUMN
   bool COMMENT 'boolean column',
   num AFTER bool,
   str AFTER num,
   bool SET DEFAULT true;

> DESCRIBE TABLE my_table;
  col_name    data_type      comment
  --------    ---------   --------------
      bool      boolean   boolean column
       num          int    number column
       str       string    string column