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 }
ADD 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 ] } [, ...] ) }
參數
-
要新增的資料行的名稱。 該名稱在資料表內必須是唯一的。
除非指定
FIRST
或AFTER name
,否則資料行或欄位將會附加至結尾。 -
要新增至現有資料行之欄位的完整名稱。 巢狀欄位路徑的所有元件都必須存在,而且欄位名稱本身必須是唯一的。
DEFAULT default_expression
適用於: Databricks SQL Databricks Runtime 11.3 LTS 和更新版本
未指定資料行時,定義
DEFAULT
和INSERT
所使用的資料行的MERGE ... INSERT
值。 默認表達式中的任何STRING
常值和STRING
函式都會使用UTF8_BINARY
定序。如果未指定預設值,
DEFAULT NULL
表示可為 Null 的資料行。default_expression
可能由常值和內建 SQL 函式或運算子組成,但下列函式除外:default_expression
不得包含任何子查詢。DEFAULT
、CSV
、JSON
和PARQUET
來源支援ORC
。-
指定資料行或欄位的資料類型。 並非所有資料來源都支援 Azure Databricks 支援的所有資料類型。
COLLATE
排序名稱針對
data_type
STRING
,可以選擇性地指定要與列或欄位一起使用的排序規則。 如果未指定,則套用UTF8_BINARY
定序。COMMENT comment
描述新增的資料行或欄位的選用
STRING
常值。如果您想要為 Unity Catalog 所管理的資料表或資料表資料行新增 AI 產生的註解,請參閱將 AI 產生的註解新增至 Unity Catalog 物件。
FIRST
如果指定,該資料行將會新增為資料表的第一個資料行,或該欄位將新增為包含結構中的第一個欄位。
AFTER
識別碼如果指定,該資料行或欄位將會新增至
identifier
欄位或資料行之後。-
適用於:Databricks SQL Databricks Runtime 12.2 LTS 和更新版本 僅限 Unity Catalog
重要
這項功能處於公開預覽狀態。
新增資料行 mask 函式來匿名敏感性資料。 該資料行的所有後續查詢都會收到針對資料行中該函式的評估結果,而不是該資料行的原始值。 這適用於更細緻的存取控制,其中函式可以檢查叫用使用者的身分識別或群組成員資格,以確定是否要修訂該值。
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 |
SET { MASK clause } |
DROP MASK |
SET TAGS clause |
UNSET TAGS clause } }
參數
-
要修改的資料行的名稱。
-
要修改的欄位的完整名稱。 巢狀欄位路徑的所有元件都必須存在。
COMMENT comment
變更
column_name
資料行的描述。comment
必須是STRING
常值。FIRST
或AFTER
識別碼將資料行從目前的位置移至前面 (
FIRST
) 或AFTER
的identifier
。 僅在table_name
為 Delta 資料表時才支援這個子句。TYPE
data_type適用於: Databricks SQL Databricks Runtime 15.2 和更新版本
變更
column_name
資料行的資料類型。僅在
table_name
為 Delta 資料表時才支援這個子句。所有 Delta 資料表均支援下列類型變更:
- 增加
VARCHAR
資料行的大小,例如從VARCHAR(5)
增加到VARCHAR(10)
- 將
CHAR
資料行的類型變更為VARCHAR
,例如從CHAR(5)
變更為VARCHAR(5)
- 將
CHAR
或VARCHAR
資料行的類型變更為STRING
,例如從VARCHAR(10)
變更為STRING
。
將
delta.enableTypeWidening
設定為true
的 Delta 資料表支援下列類型變更:重要
在 Databricks Runtime 15.2 和更新版本中,這項功能處於公開預覽狀態。
來源類型 支援的更廣泛的類型 BYTE
SHORT
、、INT
、BIGINT
、DECIMAL
、DOUBLE
SHORT
INT
、 、BIGINT
、DECIMAL
DOUBLE
INT
BIGINT
、 、DECIMAL
DOUBLE
BIGINT
DECIMAL
,DOUBLE
FLOAT
DOUBLE
DECIMAL
具有更大的有效位數和小數位數的 DECIMAL
DATE
TIMESTAMP_NTZ
如需類型擴展的詳細資訊,請參閱類型擴展。
- 增加
SET NOT NULL
或DROP NOT NULL
將有效資料行值的定義域變更為排除 Null
SET NOT NULL
,或包含 NullDROP 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 和更新版本
未指定資料行時,定義
DEFAULT
和INSERT
所使用的資料行的MERGE ... INSERT
值。如果未指定預設值,
DEFAULT NULL
表示可為 Null 的資料行。default_expression
可能由常值、內建 SQL 函式或運算子組成,但下列函式除外:default_expression
不得包含子查詢。DEFAULT
、CSV
、JSON
和ORC
來源支援PARQUET
。當您定義新增資料行的預設值時,預設值會套用至所有預先存在的資料列。 如果預設值包含非決定性函式,例如
rand
或current_timestamp
,則在執行ALTER TABLE
時計算該值一次,並會作為常數套用至預先存在的資料列。 對於新插入的資料列,預設運算式會針對每個資料列執行一次。當您使用
ALTER COLUMN
設定預設值時,現有資料列不會受到該變更的影響。SET
MASK 子句適用於:Databricks SQL Databricks Runtime 12.2 LTS 和更新版本 僅限 Unity Catalog
重要
這項功能處於公開預覽狀態。
新增資料行 mask 函式來匿名敏感性資料。 該資料行的所有後續查詢都會收到針對資料行中該函式的評估結果,而不是該資料行的原始值。 這適用於更細緻的存取控制,其中函式可以檢查叫用使用者的身分識別或群組成員資格,以確定是否要修訂該值。
DROP MASK
適用於:僅限 Unity Catalog
重要
這項功能處於公開預覽狀態。
請移除此資料行的資料行 mask 函式 (如有)。 此資料行的未來查詢將會收到該資料行的原始值。
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
在資料表或資料行內必須是唯一的。
DROP COLUMN 子句
重要
這項功能處於公開預覽狀態。
適用於: Databricks SQL Databricks Runtime 11.3 LTS 和更新版本
卸除 Delta Lake 資料表中的一或多個資料行或欄位。
當您卸除資料行或欄位時,必須卸除相依 Check 條件約束和產生的資料行。
有關需求,請參閱重新命名和卸除與 Delta Lake 資料行對應的資料行。
語法
DROP [COLUMN | COLUMNS] [ IF EXISTS ] ( { {column_identifier | field_name} [, ...] )
參數
IF EXISTS
當您指定
IF EXISTS
時,Azure Databricks 會略過卸除不存在的資料行。 否則,卸除不存在的資料行會造成錯誤。-
現有資料行的名稱。
-
現有欄位的完整名稱。
RENAME COLUMN 子句
重要
這項功能處於公開預覽狀態。
適用於: Databricks SQL Databricks Runtime 10.4 LTS 和更新版本
重新命名已啟用數據行對應之 Delta Lake 資料表中的數據行或字段。
當您重新命名資料行或欄位時,您也需要變更相依 Check 條件約束和產生的資料行。 將會卸除使用該資料行的任何主索引鍵和外部索引鍵。 如果是外部索引鍵,您必須擁有定義該外部索引鍵的資料表。
如需需求,以及如何啟用數據行對應,請參閱 使用 Delta Lake 數據行對應來重新命名和卸載數據行。
語法
RENAME COLUMN { column_identifier TO to_column_identifier|
field_name TO to_field_identifier }
參數
-
資料行的名稱。
-
新的資料行的標識碼。 該標識碼在資料表內必須是唯一的。
-
欄位的現有完整名稱。
-
新的欄位的識別碼。 該標識碼在本機結構內必須是唯一的。
範例
請參閱 ALTER TABLE 範例。