ALTER TABLE (Databricks SQL)

테이블의 스키마 나 속성을 변경 합니다.

델타 Lake에서 형식 변경 또는 열 이름 바꾸기에 대 한 자세한 내용은 데이터 다시 작성을 참조 하세요.

테이블에 대 한 설명을 변경 하려면 주석을 사용 합니다.

테이블이 캐시 되는 경우이 명령은 테이블의 캐시 된 데이터와이를 참조 하는 모든 종속 항목을 지웁니다. 다음 번에 테이블이 나 종속 파일에 액세스할 때 캐시가 지연 됩니다.

구문

ALTER TABLE table_name
   { RENAME clause |
     ADD COLUMN clause |
     ALTER COLUMN clause |
     ADD CONSTRAINT clause |
     DROP CONSTRAINT clause |
     SET LOCATION clause |
     ADD PARTITION clause |
     DROP PARTITION clause |
     RENAME PARTITION clause |
     RECOVER PARTITIONS clause |
     SET TBLPROPERTIES clause |
     UNSET TBLPROPERTIES clause |
     SET LOCATION clause }

매개 변수

  • table_name

    변경할 테이블을 식별 합니다. 이름에는 temporal 사양이포함 되지 않아야 합니다.

  • TO_TABLE_NAME 로 이름 바꾸기

    동일한 데이터베이스의 새 테이블로 테이블의 이름을 바꿉니다.

  • 열 추가

    이 절은 데이터 원본에 대해 지원 되지 않습니다 JDBC .

    테이블에 하나 이상의 열을 추가 하거나 델타 Lake 테이블의 기존 열에 필드를 추가 합니다.

    { ADD [COLUMNS | COLUMNS ]
      ( { {column_identifier | field_name} data_type [COMMENT comment] [FIRST | AFTER identifier] } [, ...] ) }
    
    • column_identifier

      추가할 열의 이름입니다. 이름은 테이블 내에서 고유 해야 합니다.

      FIRST또는 AFTER name 를 지정 하지 않으면 열 이나 필드가 끝에 추가 됩니다.

    • field_name

      기존 열에 추가할 필드의 정규화 된 이름입니다. 중첩 된 필드에 대 한 경로의 모든 구성 요소가 있어야 하 고 필드 이름은 고유 해야 합니다.

    • 주석 주석

      추가 된 열 또는 필드를 설명 하는 선택적 문자열 리터럴입니다.

    • FIRST

      지정 된 경우 열이 테이블의 첫 번째 열로 추가 되거나 필드가 포함 하는 구조체의 첫 번째 필드로 추가 됩니다.

    • 식별자 이후

      지정 된 경우 열 또는 필드가 필드 또는 열 바로 뒤에 추가 됩니다 identifier .

  • 열 변경

    속성 또는 열의 위치를 변경 합니다.

    { { ALTER | CHANGE } [COLUMN] { column_identifier | field_name }
      { COMMENT comment |
        { FIRST | AFTER column_identifier } |
        { SET | DROP } NOT NULL } } }
    
    • column_identifier

      변경할 열의 이름입니다.

    • field_name

      변경할 필드의 정규화 된 이름입니다. 중첩 된 필드의 경로에 있는 모든 구성 요소가 있어야 합니다.

    • 주석 주석

      열에 대 한 설명을 변경 column_name 합니다. comment 는 문자열 리터럴이어야 합니다.

    • 첫 번째 또는 다음 식별자

      열을 현재 위치에서 front ( FIRST ) 또는 즉시로 이동 AFTERidentifier 합니다. 이 절은가 델타 테이블인 경우에만 지원 됩니다 table_name .

    • SET NOT null 또는 DROP null

      Null을 제외 하거나 null을 포함 하도록 유효한 열 값의 도메인을 변경 합니다 SET NOT NULLDROP NOT NULL . 이 옵션은 델타 Lake 테이블에 대해서만 지원 됩니다. 델타 Lake는 제약 조건이 모든 기존 및 새 데이터에 대해 유효한 지 확인 합니다.

  • 제약 조건 추가 constraint_name CHECK ( 조건 )

    델타 Lake 테이블에 check 제약 조건을 추가 합니다.

    • constraint_name

      테이블 내에서 고유한 식별자입니다.

    • CHECK ( 조건 )

      부울 값을 반환 하는 결정적 식입니다.

      condition는 리터럴, 테이블 내의 열 식별자 및 다음을 제외한 결정적 기본 제공 SQL 함수나 연산자로 구성 될 수 있습니다.

      또한 conditioncondition를 포함 하지 않아야 합니다.

      CHECK 제약 조건이 충족 되려면를로 계산 해야 Azure Databricks true .

      델타 Lake가 새 데이터와 기존 데이터에 대해 check 제약 조건의 유효성을 확인 했습니다. 기존 행이 제약 조건을 위반 하는 경우 오류가 발생 합니다.

  • DROP 제약 조건 constraint_name

    델타 Lake 테이블에서 check 제약 조건을 제거 합니다.

  • 파티션 추가

    지정 된 경우 테이블에 하나 이상의 파티션을 추가 합니다. 델타 Lake 테이블에는 파티션 추가가 지원 되지 않습니다.

    ADD [IF NOT EXISTS] { PARTITION clause [ LOCATION path ] } [...]
    
    • 존재 하지 않는 경우

      파티션이 이미 존재 하는 경우 Databricks SQL에서 문을 무시 하도록 지시 하는 선택적 절입니다.

    • PARTITION 절

      추가할 파티션입니다. 파티션 키는 테이블의 분할과 일치 해야 하며 값에 연결 되어야 합니다. 파티션이 이미 있으면가 지정 되지 않은 경우 오류가 발생 IF NOT EXISTS 합니다.

    • 위치 경로

      path 는 파티션을 가리키는 선택적 위치를 나타내는 문자열 리터럴이어야 합니다.

      위치를 지정 하지 않으면 위치가 테이블의 위치 및 파티션 키에서 파생 됩니다.

      위치에 파일이 있는 경우 파티션을 채우고 data_source 테이블 및 해당 옵션의와 호환 되어야 합니다.

  • 파티션 삭제

    이 절을 지정 하면 테이블에서 하나 이상의 파티션을 삭제 하 고 필요에 따라 파티션의 위치에 있는 모든 파일을 삭제 합니다.

    델타 Lake 테이블은 파티션 삭제를 지원 하지 않습니다.

    DROP [ IF EXISTS ] PARTITION clause [, ...] [PURGE]
    
    • IF EXISTS

      Azure Databricks 지정 하면 IF EXISTS 존재 하지 않는 파티션을 삭제 하려는 시도가 무시 됩니다. 그렇지 않은 경우에는 기존 파티션이 아닌 오류가 발생 합니다.

    • PARTITION 절

      삭제할 파티션을 지정 합니다. 파티션이 부분적 으로만 식별 되 면 파티션 조각이 삭제 됩니다.

    • PURGE

      설정 하는 경우 카탈로그에서 구성 된 경우에도 휴지통 폴더를 건너뛰어 테이블 카탈로그가 파티션 데이터를 제거 해야 합니다. 옵션은 관리 되는 테이블에만 적용할 수 있습니다. 다음 경우에만 적용 됩니다.

      파일 시스템은 휴지통 폴더를 지원 합니다. 삭제 된 파티션을 휴지통 폴더로 이동 하도록 카탈로그를 구성 했습니다. AWS S3에는 휴지통 폴더가 없으므로 유효 하지 않습니다.

      파티션을 삭제 한 후 파일을 수동으로 삭제할 필요는 없습니다.

  • 파티션 이름 바꾸기

    파티션의 키를 바꿉니다.

    델타 Lake 테이블은 파티션 이름을 바꾸는 것을 지원 하지 않습니다.

    from_partition_clause RENAME TO to_partition_clause
    
  • 파티션 복구

    이 절은 델타 Lake 테이블에는 적용 되지 않습니다.

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

  • TBLPROPERTIES 설정

    테이블의 사용자 정의 속성을 하나 이상 설정 합니다. 속성은 키 값 쌍입니다. 속성의 키가 있으면 값이 새 값으로 바뀝니다. 속성의 키가 없는 경우 키-값 쌍이 속성에 추가 됩니다.

    SET TBLPROPERTIES ( { property_key = property_val } [, ...] )
    
    • property_key

      속성 키입니다. 키는 점이 나 문자열 리터럴로 구분 된 하나 이상의 식별자 로 구성 될 수 있습니다.

      속성 키는 고유 해야 합니다.

    • property_val

      속성의 새 값입니다. 값은 부울, 문자열, 정수 또는 10 진수 리터럴이어야 합니다.

  • TBLPROPERTIES 설정 해제

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

    UNSET TBLPROPERTIES [ IF EXISTS ] ( property_key [, ...] )
    
    • IF EXISTS

      IF EXISTS이 지정 되지 않은 경우 속성을 설정 하지 않으면 오류가 raided 됩니다.

    • property_key

      키는 점이 나 문자열 리터럴로 구분 된 하나 이상의 식별자 로 구성 될 수 있습니다.

      속성 키는 고유 해야 합니다.

  • 위치 설정

    파티션 또는 테이블의 위치를 이동 합니다.

    델타 Lake는 델타 Lake 테이블의 개별 파티션을 이동 하는 것을 지원 하지 않습니다.

    [ PARTITION clause ] SET LOCATION path
    
    • PARTITION 절

      선택적으로 위치를 변경할 파티션을 식별 합니다. 파티션 이름 지정을 생략 하면 테이블의 위치가 Azure Databricks 이동 합니다.

    • 위치 경로

      path 는 문자열 리터럴이어야 합니다. 파티션 또는 테이블에 대 한 새 위치를 지정 합니다.

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

델타 Lake 추가 및 변경 열 예제는를 참조 하세요.

-- RENAME table
> DESC 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
> DESC 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
> DESC 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
> DESC 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
> DESC 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
> DESC 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

-- Change the file Location
> ALTER TABLE dbx.tab1 PARTITION (a='1', b='2') SET LOCATION '/path/to/part/ways'

-- SET TABLE PROPERTIES
> ALTER TABLE dbx.tab1 SET TBLPROPERTIES ('winner' = 'loser');

-- DROP TABLE PROPERTIES
> ALTER TABLE dbx.tab1 UNSET TBLPROPERTIES ('winner');