適用於:
Databricks SQL
Databricks Runtime
改變資料表的結構描述或屬性。
暫存資料表支援 ALTER TABLE ... SET TBLPROPERTIES 及 ALTER TABLE ... UNSET TBLPROPERTIES 無伺服器運算、Databricks Runtime 18.2 及以上版本,以及 Databricks SQL 2026.15 及以上版本。 其他 ALTER TABLE 子句在暫存資料表中不被支援,會回傳錯誤。 如果資料表已快取,命令會清除該資料表和所有依賴它的項目的快取資料。 當表格或其從屬項再次被訪問時,緩存將被延遲填充。
外表支援有限的 ALTER TABLE 操作集合,包括 ALTER TABLE SET OWNER、 ALTER TABLE RENAME TO、 ALTER TABLE SET MANAGED { MOVE | COPY }和 ALTER TABLE SET EXTERNAL。
SET MANAGED 並 SET EXTERNAL 需要一個外部表格,並使用 Hive metastore 和 Glue Federation 聯邦,並且 SET MANAGED 還需要 Delta Lake 格式。 請參閱 外部資料表 及 將外部資料表轉換為外部 Unity 目錄資料表。
所需的權限
如果您使用 Unity Catalog ,則必須具有以下項目的 MODIFY 權限:
ALTER COLUMNADD COLUMNDROP COLUMNSET TBLPROPERTIESUNSET TBLPROPERTIES
如果您使用 Unity Catalog,您必須擁有 MANAGE 許可權或擁有下列所有權:
SET OWNER TOPREDICTIVE OPTIMIZATION
所有其他運算都需要擁有表的所有權,包括 SET MANAGED 和 UNSET MANAGED。
SET EXTERNAL 而外 SET MANAGED 表形式也需要 CREATE 在 EXTERNAL LOCATION上取得許可。 關於每次轉換的完整前提條件,請參見 前提 條件與 前提條件。
語法
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 EXTERNAL clause |
SET MANAGED clause |
UNSET MANAGED clause |
SET OWNER TO clause |
SET TAGS clause |
UNSET TAGS clause |
CLUSTER BY clause |
REPLACE PARTITIONED BY WITH CLUSTER BY clause |
PREDICTIVE OPTIMIZATION clause}
參數
-
識別要改變的資料表。 名稱不得包含 時態規格或選項規格。 如果找不到數據表,Azure Databricks 就會引發 TABLE_OR_VIEW_NOT_FOUND 錯誤。
RENAME TOto_table_name重新命名數據表。
-
識別新的資料表名稱。 名稱不得包含 時態規格或選項規格。
針對 Unity 目錄資料表,
to_table_name必須在與table_name相同的目錄中。 對於其他數據表,to_table_name必須在與table_name相同的架構內。如果
to_table_name未限定,則會隱含以當前結構限定。
> ALTER TABLE student RENAME TO student_info;-
-
將一個或多個資料行新增至資料表。
當你在現有的 Delta Lake 資料表中新增欄位時,無法定義一個
DEFAULT值。 所有新增到 Delta Lake 資料表的欄位都會視為NULL現有的列。 新增欄位後,你可以選擇性地用ALTER COLUMN來定義新列的預設值。> DESCRIBE StudentInfo; col_name data_type comment ----------------------- --------- ------- name string NULL rollno int NULL 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 -- Optionally set a default value for new rows > ALTER TABLE StudentInfo ALTER COLUMN LastName SET DEFAULT 'unknown';
-
變更屬性或欄的位置。
> DESCRIBE StudentInfo; col_name data_type comment ----------------------- --------- ------- name string NULL rollno int NULL LastName string NULL DOB timestamp NULL age int NULL > ALTER TABLE StudentInfo ALTER COLUMN name COMMENT "new comment"; -- After altering the column > DESCRIBE StudentInfo; col_name data_type comment ----------------------- --------- ----------- name string new comment rollno int NULL LastName string NULL DOB timestamp NULL age int NULL在單一語句中修改多欄:
-- 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 -
刪除 Delta Lake 資料表中的一或多個資料行或欄位。
-
將 Delta Lake 資料表中的資料行或欄位重新命名。
> ALTER TABLE StudentInfo RENAME COLUMN name TO FirstName; -- After renaming the column > DESCRIBE StudentInfo; col_name data_type comment ----------------------- --------- ----------- FirstName string new comment rollno int NULL LastName string NULL DOB timestamp NULL age int NULL
-
將檢查約束、資訊性外鍵約束或資訊性主鍵約束新增至資料表。
只有 Unity Catalog 中的資料表支援外部索引鍵和主索引鍵,而不是
hive_metastore目錄。 DEFAULT COLLATION排序名稱適用於:
Databricks SQL
Databricks Runtime 16.3 和更新版本變更數據表中新
STRING欄位的預設排序規則。 現有的欄位不會受到這個子句的影響。 若要變更現有資料列的定序,請使用ALTER TABLE ... ALTER COLUMN ... COLLATE collation_name。
-
從資料表中卸除主鍵、外鍵或檢查約束。
DROP FEATURE feature_name [ TRUNCATE HISTORY ]適用於:
Databricks Runtime 14.3 LTS 和更新版本從 Databricks Runtime 14.3 LTS 開始提供舊版支援
DROP FEATURE。 如需舊版功能的相關文件,請參閱卸除 Delta 資料表功能(舊版)。適用於:
Databricks SQL
Databricks Runtime 16.3 和更新版本Azure Databricks 建議針對所有
DROP FEATURE命令使用 Databricks Runtime 16.3 和更新版本,以取代舊版行為。從 Delta Lake 資料表中移除功能。
拿掉功能可能會導致在資料表通訊協定中新增
checkpointProtection寫入器功能。 欲了解更多資訊,請參閱 Drop Delta 表格功能 、 協定版本與表格功能。feature_name功能名稱以
STRING常值或識別符形式表示,必須能被 Azure Databricks 所識別並且在資料表上獲得支援。如果 Azure Databricks 數據表中沒有此功能,就會引發 DELTA_FEATURE_DROP_FEATURE_NOT_PRESENT。
刪除歷史
透過截斷歷史紀錄來移除功能。 這需要兩個階段程式:
藉由截斷歷程記錄來移除功能需要兩個步驟的過程:
第一次調用會清除功能的痕跡,並通知您部分的成功。
然後,等待保留期結束,再次執行語句以完成移除。
如果您過早起始第二個叫用,Azure Databricks 會引發 DELTA_FEATURE_DROP_WAIT_FOR_RETENTION_PERIOD 或 DELTA_FEATURE_DROP_HISTORICAL_VERSIONS_EXIST。
截斷數據表歷程記錄會限制您執行 DESCRIBE HISTORY 和執行時間移動查詢的能力。
-- 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;-
將一個或多個分割區新增至資料表。
> 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 -- Adding multiple partitions to the table > ALTER TABLE StudentInfo ADD IF NOT EXISTS PARTITION (age=18) PARTITION (age=20); > SHOW PARTITIONS StudentInfo; partition --------- age=11 age=12 age=15 age=18 age=20 -
從資料表刪除一個或多個分割區。
> 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 -
設定分割區的位置。
> ALTER TABLE dbx.tab1 PARTITION (a='1', b='2') SET LOCATION '/path/to/part/ways'; -
更換分區的鍵。
> 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 -
指示 Azure Databricks 掃描數據表的位置,並將任何檔案新增至已直接新增至文件系統的數據表。
SETROW FILTER 條款適用於:
Databricks SQL
Databricks Runtime 12.2 LTS 及以上版本 
將資料列篩選函數新增至資料表。 資料表的所有後續查詢都會取得函式評估結果為布林值為真的資料列子集。 這適用於更細緻的存取控制,其中函式可以檢查叫用使用者的身分識別或群組成員資格,以決定是否要篩選某些資料列。
DROP ROW FILTER適用於:
Unity 目錄如果有的話,從資料表移除行篩選條件。 未來的查詢將會從資料表傳回所有資料列,而不需要任何自動篩選。
-
設定或重設一個或多個使用者定義的屬性。
> ALTER TABLE dbx.tab1 SET TBLPROPERTIES ('winner' = 'loser'); -
移除一個或多個使用者定義的屬性。
> ALTER TABLE dbx.tab1 UNSET TBLPROPERTIES ('winner'); SET SERDE適用於:
Databricks Runtime指定用於在 Hive 格式資料表中讀寫資料的序列化器/解序列器(SerDe)類別。 你也可以用
WITH SERDEPROPERTIES來設定 SerDe 屬性。> 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 LOCATION移動資料表的位置。
SET LOCATION pathLOCATION pathpath必須是STRING文字表達式。 指定表格的新位置。原始位置中的檔案 將不會 移至新位置。
SET EXTERNAL [ DRY RUN ]適用於:
Databricks 執行時間 17.3 及以上版本 勾
僅 Unity 目錄將外部資料表轉換為 Unity 目錄的外部資料表,保留資料表歷史與設定,包括名稱、設定、權限與檢視。 僅支援於使用 Hive metastore 和 Glue Federation 聯合的外部資料表。
表格上需要
OWNER或MANAGE權限,以及CREATEEXTERNAL LOCATION。要回滾轉換,請將表格放下。 Azure Databricks 會在下一次目錄同步時重新聯合它作為外部資料表。
DRY RUN檢查來源資料表是否可轉換,但不需轉換。 如果表格能轉換,指令會回傳
DRY_RUN_SUCCESS。
關於前置條件及格式特定指引,請參見「 將外部資料表轉換為外部 Unity 目錄資料表」。
-- Check whether a foreign table can be converted > ALTER TABLE hms_federated_catalog.my_schema.my_table SET EXTERNAL DRY RUN; -- Convert a foreign table to an external table > ALTER TABLE hms_federated_catalog.my_schema.my_table SET EXTERNAL;
SET MANAGED適用於:
執行時間 17.3 LTS 及以上
僅 Unity 目錄將 Unity 目錄的外部或外部 Delta Lake 資料表轉換為 Unity 目錄管理的資料表。 轉換時會保留資料表名稱、設定、權限、檢視和歷史紀錄。
外部表與外部表使用不同形式的子句,如下語法所示:
SET MANAGED [ TRUNCATE UNIFORM HISTORY ] -- external tables SET MANAGED { MOVE | COPY } -- foreign tables對於外部表,省略
MOVE和COPY。 如果你包含其中一項,Azure Databricks會加DELTA_ALTER_TABLE_SET_MANAGED_UNSUPPORTED_COPY_MOVE_SYNTAX。對於外來資料表,請指定為
MOVE或COPY。 如果兩者都省略,Azure Databricks會DELTA_ALTER_TABLE_SET_MANAGED_COPY_OR_MOVE_REQUIRED。 若要在兩種形式間選擇,請參見「 選擇正確的指令給你的來源資料表」。TRUNCATE UNIFORM HISTORY適用於啟用 Apache Iceberg 讀取的 外部資料表。 如果表格啟用了 Iceberg 讀取,而你省略了這個選項,Azure Databricks DELTA_ALTER_TABLE_SET_MANAGED_DOES_NOT_SUPPORT_UNIFORM_ICEBERG。
TRUNCATE UNIFORM HISTORY它刪減了 UniForm Iceberg 的歷史,卻沒有刪除 Delta Lake 的歷史。 截斷會導致短暫的 Iceberg 讀寫停機。MOVE將外部資料表轉換為管理資料表,並禁用外部目錄中對來源資料表的存取。 轉換後,外部目錄及路徑存取無法存取,因此所有讀者與寫者必須使用 Unity 目錄命名空間。
COPY將外部資料表轉換為管理資料表,且不修改或停用外部目錄中對來源資料表的存取。 轉換後會將資料複製到受管理的儲存位置,產生兩個獨立的資料副本。 你負責停用對來源資料表的讀寫,並將工作負載遷移到受管理的資料表。
關於前置條件、停機時間估算及故障排除,請參見「 將外部或外部 Delta Lake 資料表轉換為 Unity Catalog 管理的資料表」。
-- Convert an external table > ALTER TABLE main.default.my_external_table SET MANAGED; -- Convert an external table that has Iceberg reads enabled > ALTER TABLE main.default.my_external_table SET MANAGED TRUNCATE UNIFORM HISTORY; -- Convert a foreign table and disable access to the source table > ALTER TABLE hms_federated_catalog.my_schema.my_table SET MANAGED MOVE;UNSET MANAGED適用於:
執行時間 17.3 LTS 及以上
僅 Unity 目錄透過更新資料表元資料指向原始外部位置,將已
SET MANAGED轉換回外部資料的表格。 Azure Databricks 保留轉換後寫入管理位置的紀錄。 對於已轉換的外部資料表,你可以在轉換後 14 天內回滾。UNSET MANAGED [ TRUNCATE UNIFORM HISTORY ]TRUNCATE UNIFORM HISTORY適用於啟用 Iceberg 讀取的表格。 如果表格啟用了 Iceberg reads 而你省略了這個選項,Azure Databricks DELTA_ALTER_TABLE_UNSET_MANAGED_DOES_NOT_SUPPORT_UNIFORM。
在轉換與回滾之間所做的提交支援依版本時間旅行,但不支援按時間戳記。
要將一個由 轉換
MOVE回外部資料表的外部資料表滾回外部資料表,執行UNSET MANAGED並丟棄該外部資料表,並在下一次目錄同步時重新聯合。用COPY轉換的外部表不需要UNSET MANAGED,因為轉換後來源表未被修改。Warning
如果你將外部資料表轉換為
MOVE,執行前不要丟棄管理資料表。UNSET MANAGED先丟掉可能會導致資料遺失或不一致。完整回滾說明請參見 「回滾管理資料表轉換」。
-- Roll a converted managed table back to an external table > ALTER TABLE main.default.my_managed_table UNSET MANAGED;[ SET ] OWNER TO校長將資料表的擁有權轉移至
principal。適用於:
Databricks SQL
Databricks Runtime 11.3 LTS 和更新版本允許
SET作為可選關鍵字。Note
在由工作區管線管理的資料集上,無法更改擁有者。
SET TAGS ( { tag_name = tag_value } [, ...] )適用於:
Databricks SQL
Databricks Runtime 13.3 LTS 和更新版本將標籤套用至資料表。 您需要具有
APPLY TAG權限,才能將標籤新增至資料表。tag_name
字面上的
STRING.tag_name在資料表或資料行內必須是唯一的。tag_value
字面上的
STRING.
-- Applies three tags to the table named `test`. > ALTER TABLE test SET TAGS ('tag1' = 'val1', 'tag2' = 'val2', 'tag3' = 'val3'); -- 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');UNSET TAGS ( tag_name [, ...] )適用於:
Databricks SQL
Databricks Runtime 13.3 LTS 和更新版本從資料表中移除標籤。 您需要具有
APPLY TAG權限,才能從資料表中移除標籤。tag_name
字面上的
STRING.tag_name在資料表或資料行內必須是唯一的。
-- Removes three tags from the table named `test`. > ALTER TABLE test UNSET TAGS ('tag1', 'tag2', 'tag3'); -- Removes three tags from table `main.schema1.test` column `col1`. > ALTER TABLE main.schema1.test ALTER COLUMN col1 UNSET TAGS ('tag1', 'tag2', 'tag3');-
適用於:
Databricks SQL
Databricks Runtime 13.3 LTS 和更新版本新增、變更或卸除 Delta Lake 資料表的叢集策略。
REPLACE PARTITIONED BY WITH CLUSTER BY [( <clustering_columns> ) | AUTO]適用於:
Databricks SQL
Databricks 執行環境 18.1 及以上版本將現有分割的 Delta Lake 表格轉換為原地液態叢集,且讀寫者停機時間最小。 此
CLUSTER BY子句接受明確的分群欄位,將AUTO鍵選擇委派給預測優化,或可省略以使用現有的分割欄位。參見 「將分割資料表轉換為液體叢集」。
{ ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION適用於:
Databricks SQL
Databricks Runtime 12.2 LTS 及以上版本 
將受控 Delta Lake 資料表變更為所需的預測優化設定。
根據預設,建立資料表時的預設行為是從數據架構中
INHERIT。當預測優化被明確啟用或繼承為啟用時,OPTIMIZE 和 VACUUM 將在 Azure Databricks 認為適當的資料表上自動叫用。 如需詳細資訊,請參閱: Unity 目錄受控數據表的預測優化。
-- Enables predictive optimization for my_table > ALTER TABLE my_table ENABLE PREDICTIVE OPTIMIZATION;
其他例子
如需查看 Delta Lake 新增條件約束和修改資料行的範例,請參閱
相關文章
- ADD CONSTRAINT 子句:新增或刪除檢查約束、主鍵與外鍵。
- ALTER MATERIALIZED VIEW: 用於改變具體化視圖的語法。
- ALTER STREAMING TABLE: 用於修改串流表的語法。
- ALTER TABLE ... COLUMN 子句:ADD、ALTER、DROP 和 RENAME COLUMN的完整語法。
- ALTER TABLE... PARTITION: 新增、刪除及重新命名分割區的完整語法。
- 透過結構演進更新資料表結構:重新命名或更改 Delta 資料表中的欄位類型。
-
將外部或外部的 Delta Lake 資料表轉換為 Unity Catalog 管理的資料表:前置條件、停機時間估計,以及 和 的回滾
SET MANAGEDUNSET MANAGED。 -
將外部資料表轉換為外部 Unity 目錄資料表:前置條件及格式特定指引
SET EXTERNAL。