共用方式為


ALTER TABLE ... COLUMN 條款

適用於:打勾為「是」 Databricks SQL 打勾為「是」 Databricks Runtime

新增、修改或刪除數據表或實體化檢視中的欄,或 Delta Lake 數據表中欄中的欄位。

所需的權限

如果您使用 Unity Catalog,則您必須擁有下列 MODIFY 許可權:

  • ALTER COLUMN
  • ADD COLUMN
  • DROP COLUMN

所有其他作業都需要數據表的擁有權。

語法

ALTER TABLE table_name
   { ADD COLUMN clause |
     ALTER COLUMN clause |
     DROP COLUMN clause |
     RENAME COLUMN clause }

增加 COLUMN 子句

JDBC 資料來源不支援此子句。

將一或多個欄加入表格,或將欄位加入至 Delta Lake 表格中現有的欄。

注意

當您將數據行新增至現有的 Delta 資料表時,無法定義 DEFAULT 值。 新增至 Delta 資料表的所有數據行都會被視為現有數據列的 NULL。 新增數據行之後,您可以選擇性地定義數據行的預設值,但這只適用於插入數據表的新數據列。 使用下列語法:

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_expression

語法

{ ADD [ COLUMN | COLUMNS ]
  ( { { column_identifier | field_name } data_type
      [ COLLATE collation_name ]
      [ DEFAULT clause ]
      [ COMMENT comment ]
      [ FIRST | AFTER identifier ]
      [ MASK clause ] } [, ...] ) }

參數

  • column_identifier

    要加入的欄位名稱。 名稱在數據表內必須是唯一的。

    除非指定 FIRSTAFTER name,否則數據行或字段將會附加在結尾。

  • field_name

    要添加至現有欄位的完整限定名稱。 巢狀欄位路徑的所有元件都必須存在,而且欄位名稱本身必須是唯一的。

  • DEFAULT default_expression

    適用於:核取記號為「是」 Databricks SQL 核取記號為「是」 Databricks Runtime 11.3 LTS 和更新版本

    當未指定某數據列時,定義該數據列在 DEFAULTINSERT 上使用的 MERGE ... INSERT 值。 默認表達式中的任何 STRING 常值和 STRING 函式都會使用 UTF8_BINARY 定序。

    如果未指定預設值,則可為空的欄將隱含 DEFAULT NULL

    default_expression 可能由常值和內建 SQL 函式或運算子組成,但下列函式除外:

    default_expression 不得包含任何子查詢

    DEFAULT 支援來自 CSVJSONPARQUETORC 的來源。

  • 資料類型

    指定資料行或欄位的數據類型。 並非所有資料來源都支援 Azure Databricks 支援的所有資料類型

  • COLLATE 排序名稱

    針對 data_typeSTRING,選擇性地指定要與欄位搭配使用的排序方式。 如果未指定,則套用 UTF8_BINARY 定序。

  • COMMENT comment

    選擇性描述加入之欄位或字段的 STRING 字面值。

    如果您想要為 Unity 目錄所管理的數據表或資料表資料行新增 AI 產生的批注,請參閱 將 AI 產生的批註新增至 Unity Catalog 物件

  • FIRST

    如果指定,數據行將會新增為數據表的第一個數據行,或將欄位新增為包含結構中的 第一個字段。

  • AFTER 識別碼

    如果指定,則會在欄位或資料行 identifier之後立即新增該欄位或資料行。

  • MASK 子句

    適用於:檢查標示為 yes Databricks SQL 檢查標示為 yes Databricks Runtime 12.2 LTS 和更新版本 檢查標示為 yes Unity Catalog 只有

    重要

    這項功能處於公開預覽狀態

    新增數據行遮罩函式來匿名敏感數據。 該欄的所有後續查詢都會接收到評估該函式於該欄上的結果,取代欄的原始值。 這對於細緻的存取控制很有用,功能可以檢查叫用使用者的身分識別或群組成員資格,以判斷是否要刪減值。

ALTER COLUMN 子句

適用於:打勾為「是」 Databricks SQL 打勾為「是」 Databricks Runtime

變更屬性或欄的位置。

語法

 { ALTER | CHANGE } [ COLUMN ]
  { { column_identifier | field_name }
    { COMMENT comment |
    { FIRST | AFTER column_identifier } |
    { SET | DROP } NOT NULL |
    TYPE data_type |
    SET DEFAULT clause |
    DROP DEFAULT |
    SYNC IDENTITY }
  [, ... ]

在 Databricks Runtime 16.3 之前,該功能不支援在單一命令中改變多個欄位。

{ ALTER | CHANGE } [ COLUMN ]
  { column_identifier | field_name }
  { SET { MASK clause } |
    DROP MASK |
    SET TAGS clause |
    UNSET TAGS clause }

參數

  • column_identifier

    要改變的欄位名稱。

    如果多次參考欄位識別符,Azure Databricks 會產生 NOT_SUPPORTED_CHANGE_SAME_COLUMN

  • field_name

    要修改的欄位的完整名稱。 巢狀欄位路徑的所有元件都必須存在。

    如果欄位名稱多次被參考,Azure Databricks 會引發 NOT_SUPPORTED_CHANGE_SAME_COLUMN

  • COMMENT comment

    變更 column_name 欄的描述。 comment 必須是 STRING 常值。

  • FIRSTAFTER標識碼

    將欄從目前位置移至最前面(FIRST),或立即將其移至 AFTERidentifier。 只有當 table_name 是 Delta 數據表時,才支援這個子句。

  • TYPE 資料類型

    適用於:勾選「是」 Databricks SQL 勾選「是」 Databricks Runtime 15.2 和更新版本

    變更 column_name 數據行的數據類型。

    只有當 table_name 是 Delta 數據表時,才支援這個子句。

    所有 Delta 資料表都支援下列類型變更:

    • 例如,將 VARCHAR 數據行的大小從 VARCHAR(5) 增加到 VARCHAR(10)
    • CHAR 數據行的類型變更為 VARCHAR,例如,從 CHAR(5) 變更為 VARCHAR(5)
    • CHARVARCHAR 資料行的類型變更為 STRING,例如,從 VARCHAR(10) 變更為 STRING

    Delta 資料表支援下列類型變更,delta.enableTypeWidening 設定為 true

    重要

    在 Databricks Runtime 15.2 和更新版本中,這項功能處於公開預覽狀態。

    來源類型 支援更廣泛的類型
    BYTE SHORT、、 INTBIGINTDECIMALDOUBLE
    SHORT INT、 、 BIGINTDECIMALDOUBLE
    INT BIGINTDECIMALDOUBLE
    BIGINT DECIMALDOUBLE
    FLOAT DOUBLE
    DECIMAL 具有更高的精確度和範圍的 DECIMAL
    DATE TIMESTAMP_NTZ

    如需類型擴展的詳細資訊,請參閱類型擴展

  • SET NOT NULLDROP NOT NULL

    變更欄位有效值的定義域,以排除 null SET NOT NULL,或包含 null DROP NOT NULL。 只有 Delta Lake 數據表才支援此選項。 Delta Lake 可確保條件約束適用於所有現有和新數據。

  • SYNC IDENTITY

    適用於:核取記號為「是」 Databricks SQL 核取記號為「是」 Databricks Runtime 10.4 LTS 和更新版本

    同步識別欄的元數據與實際數據。 當您將自己的值寫入識別欄位時,它可能不符合元數據要求。 此選項會評估狀態,並更新中繼資料以與實際資料一致。 在此命令之後,下一個自動指派的識別值會從 start + (n + 1) * step開始,其中 n 是滿足 start + n * step >= max() 的最小值(針對正步驟)。

    只有 Delta Lake 資料表上的識別數據行才支援此選項。

  • DROP DEFAULT

    適用於:核取記號為「是」 Databricks SQL 核取記號為「是」 Databricks Runtime 11.3 LTS 和更新版本

    從數據行中移除預設表達式。 對於可為 Null 的欄位,這相當於 SET DEFAULT NULL。 針對以 NOT NULL 定義的數據行,您需要在每個未來的 INSERT 作業中填入數值。

  • SET DEFAULT default_expression

    適用於:核取記號為「是」 Databricks SQL 核取記號為「是」 Databricks Runtime 11.3 LTS 和更新版本

    當未指定某數據列時,定義該數據列在 DEFAULTINSERT 上使用的 MERGE ... INSERT 值。

    如果未指定預設值,可為 Null 的欄預設為 DEFAULT NULL

    default_expression 可能由常值、內建 SQL 函式或運算子組成,但下列函式除外:

    default_expression 不得包含子查詢

    DEFAULT 支援來自 CSVJSONORCPARQUET 的來源。

    當您定義新加入數據行的預設值時,預設值會套用至所有預先存在的數據列。 如果預設值包含非決定性函式,例如 randcurrent_timestamp,則在執行 ALTER TABLE 時計算該值一次,並會作為常數套用至預先存在的資料列。 對於新插入的資料列,預設運算式會針對每個資料列執行一次。

    當您使用 ALTER COLUMN設定預設值時,現有的數據列不會受到該變更的影響。

  • SET MASK 子句

    適用於:檢查標示為 yes Databricks SQL 檢查標示為 yes Databricks Runtime 12.2 LTS 和更新版本 檢查標示為 yes Unity Catalog 只有

    重要

    這項功能處於公開預覽狀態

    新增數據行遮罩函式來匿名敏感數據。 該欄的所有後續查詢都會接收到評估該函式於該欄上的結果,取代欄的原始值。 這對於細緻的存取控制很有用,功能可以檢查叫用使用者的身分識別或群組成員資格,以判斷是否要刪減值。

  • DROP MASK

    適用於:已勾選是 僅限 Unity Catalog

    重要

    這項功能處於公開預覽狀態

    如果存在,請移除此欄的遮罩。 此數據行的未來查詢將會收到數據行的原始值。

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

    適用於:選取標記為「是」 Databricks SQL 選取標記為「是」 Databricks Runtime 13.3 LTS 和更高版本

    將標籤套用至欄位。 您必須有 APPLY TAG 許可權,才能將標籤新增至數據行。

    • tag_name

      字面意義的 STRINGtag_name 在數據表或數據行內必須是唯一的。

    • tag_value

      字面意義的 STRING

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

    適用於:選取標記為「是」 Databricks SQL 選取標記為「是」 Databricks Runtime 13.3 LTS 和更高版本

    從欄中移除標籤。 您需要有 APPLY TAG 許可權,才能從數據行中移除標籤。

    • tag_name

      字面意義的 STRINGtag_name 在數據表或數據行內必須是唯一的。

DROP COLUMN 子句

重要

這項功能處於公開預覽狀態

適用於:核取記號為「是」 Databricks SQL 核取記號為「是」 Databricks Runtime 11.3 LTS 和更新版本

刪除關係中的一個或多個欄位。

當您卸除數據行或字段時,您必須卸除相依檢查條件約束和產生的數據行。

如需了解需求,請參閱 使用 Delta Lake 資料行對應重新命名和刪除資料行

語法

DROP [COLUMN | COLUMNS] [ IF EXISTS ] ( { {column_identifier | field_name} [, ...] )

參數

  • IF EXISTS

    當您指定 IF EXISTS時,Azure Databricks 會忽略嘗試卸除不存在的數據行。 否則,刪除不存在的欄位會造成錯誤。

  • column_identifier

    現有欄的名稱。

  • field_name

    現有欄位的完整名稱。

RENAME COLUMN 子句

重要

這項功能處於公開預覽狀態

適用於:核取記號為「是」 Databricks SQL 核取記號為「是」 Databricks Runtime 10.4 LTS 和更新版本

重新命名已啟用欄映射的 Delta Lake 資料表中的欄或字段。

當您重新命名資料行或欄位時,您也需要變更相依的檢查條件約束規則和生成的欄位。 將會刪除任何使用該欄的主鍵和外鍵。 如果是外鍵,您必須擁有定義外鍵的數據表。

如需條件,以及如何啟用欄位對應,請參閱 使用 Delta Lake 欄位對應重新命名和刪除欄位

語法

RENAME COLUMN { column_identifier TO to_column_identifier|
                field_name TO to_field_identifier }

參數

範例

請參閱 ALTER TABLE範例。