適用於: 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 ] } [, ...] ) }
參數
-
要加入的欄位名稱。 名稱在數據表內必須是唯一的。
除非指定
FIRST
或AFTER name
,否則數據行或字段將會附加在結尾。 -
要添加至現有欄位的完整限定名稱。 巢狀欄位路徑的所有元件都必須存在,而且欄位名稱本身必須是唯一的。
DEFAULT default_expression
適用於:
Databricks SQL
Databricks Runtime 11.3 LTS 和更新版本
當未指定某數據列時,定義該數據列在
DEFAULT
和INSERT
上使用的MERGE ... INSERT
值。 默認表達式中的任何STRING
常值和STRING
函式都會使用UTF8_BINARY
定序。如果未指定預設值,則可為空的欄將隱含
DEFAULT NULL
。default_expression
可能由常值和內建 SQL 函式或運算子組成,但下列函式除外:default_expression
不得包含任何子查詢。DEFAULT
支援來自CSV
、JSON
、PARQUET
和ORC
的來源。-
指定資料行或欄位的數據類型。 並非所有資料來源都支援 Azure Databricks 支援的所有資料類型。
COLLATE
排序名稱針對
data_type
STRING
,選擇性地指定要與欄位搭配使用的排序方式。 如果未指定,則套用UTF8_BINARY
定序。COMMENT comment
選擇性描述加入之欄位或字段的
STRING
字面值。如果您想要為 Unity 目錄所管理的數據表或資料表資料行新增 AI 產生的批注,請參閱 將 AI 產生的批註新增至 Unity Catalog 物件。
FIRST
如果指定,數據行將會新增為數據表的第一個數據行,或將欄位新增為包含結構中的 第一個字段。
AFTER
識別碼如果指定,則會在欄位或資料行
identifier
之後立即新增該欄位或資料行。-
適用於:
Databricks SQL
Databricks Runtime 12.2 LTS 和更新版本
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 }
參數
-
要改變的欄位名稱。
如果多次參考欄位識別符,Azure Databricks 會產生 NOT_SUPPORTED_CHANGE_SAME_COLUMN。
-
要修改的欄位的完整名稱。 巢狀欄位路徑的所有元件都必須存在。
如果欄位名稱多次被參考,Azure Databricks 會引發 NOT_SUPPORTED_CHANGE_SAME_COLUMN。
COMMENT comment
變更
column_name
欄的描述。comment
必須是STRING
常值。FIRST
或AFTER
標識碼將欄從目前位置移至最前面(
FIRST
),或立即將其移至AFTER
identifier
。 只有當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)
- 將
CHAR
或VARCHAR
資料行的類型變更為STRING
,例如,從VARCHAR(10)
變更為STRING
。
Delta 資料表支援下列類型變更,
delta.enableTypeWidening
設定為true
:重要
在 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
值。如果未指定預設值,可為 Null 的欄預設為
DEFAULT 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 只有
重要
這項功能處於公開預覽狀態。
新增數據行遮罩函式來匿名敏感數據。 該欄的所有後續查詢都會接收到評估該函式於該欄上的結果,取代欄的原始值。 這對於細緻的存取控制很有用,功能可以檢查叫用使用者的身分識別或群組成員資格,以判斷是否要刪減值。
DROP MASK
適用於:
僅限 Unity Catalog
重要
這項功能處於公開預覽狀態。
如果存在,請移除此欄的遮罩。 此數據行的未來查詢將會收到數據行的原始值。
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 資料行對應重新命名和刪除資料行。
語法
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 資料表中的欄或字段。
當您重新命名資料行或欄位時,您也需要變更相依的檢查條件約束規則和生成的欄位。 將會刪除任何使用該欄的主鍵和外鍵。 如果是外鍵,您必須擁有定義外鍵的數據表。
如需條件,以及如何啟用欄位對應,請參閱 使用 Delta Lake 欄位對應重新命名和刪除欄位。
語法
RENAME COLUMN { column_identifier TO to_column_identifier|
field_name TO to_field_identifier }
參數
-
欄位的現有名稱。
-
新的欄標識碼。 標識碼在數據表內必須是唯一的。
-
欄位的現有完整名稱。
-
新的欄位識別碼。 標識碼在本機結構內必須是唯一的。
範例
請參閱 ALTER TABLE範例。