ALTER TABLE (SQL數據庫)

修改表的模式或屬性。

要更改類型或重命名Delta Lake中的列,請參閱重寫數據

要更改表上的注釋,請使用評論

如果表已緩存,該命令將清除表的緩存數據及其引用它的所有依賴項。下一次訪問表或依賴項時,緩存將被惰性填充。

需要的權限

如果你使用Unity目錄,你必須在表上有所有權使用ALTER table:

  • 更換所有者

  • 授予表上的權限

  • 更改表名

對於表上的所有其他元數據操作(例如更新注釋、屬性或列),如果您對表具有MODIFY權限,則可以進行更新。

語法

改變表格table_name重命名條款|添加條款|改變條款|下降條款|重命名條款|添加約束條款|下降約束條款|添加分區條款|下降分區條款|重命名分區條款|恢複分區條款|TBLPROPERTIES條款|設置TBLPROPERTIES條款|位置條款|老板條款

參數

  • table_name

    標識要更改的表。名稱中不能包含時間規範

  • 重命名為to_table_name

    在相同的模式中重命名表。

    請注意

    如果使用AWS Glue Data Catalog作為metastore,則不支持RENAME。

  • 添加一列

    不支持此子句JDBC數據源。

    向表中添加一個或多個列,或向Delta Lake表中的現有列中添加字段。

    添加|column_identifier|field_namedata_type評論評論第一個|標識符(,...
    • column_identifier

      要添加的列的名稱。名稱在表中必須是唯一的。

      除非第一個的名字指定後,列或字段將被追加到末尾。

    • field_name

      要添加到現有列的字段的完全限定名稱。指向嵌套字段的路徑的所有組件必須存在,並且字段名稱本身必須是唯一的。

    • 評論發表評論

      一個可選的STRING字麵值,描述所添加的列或字段。

    • 第一個

      如果指定了該列,則該列將被添加為表的第一列,或者該字段將被添加為包含結構中的第一個字段。

    • 標識符

      如果指定了,則列或字段將立即添加在字段或列之後標識符

  • 改變列

    更改屬性或列的位置。

    改變|改變column_identifier|field_name評論評論|第一個|column_identifier||下降|同步身份
    • column_identifier

      要修改的列的名稱。

    • field_name

      要更改的字段的完全限定名稱。指向嵌套字段的路徑的所有組件必須存在。

    • 評論發表評論

      控件的描述column_name列。評論必須是STRING字麵值。

    • 第一個標識符

      將列從當前位置移動到前麵(第一個)或立即標識符.此子句僅在以下情況下支持table_name是Delta表。

    • 設置不為空Drop not null

      更改有效列值的域以排除空值,或包含空值下降.此選項僅支持Delta Lake表。Delta Lake將確保約束對所有現有數據和新數據都有效。

    • 同步的身份

      同步標識列的元數據與實際數據。當您將自己的值寫入標識列時,它可能不符合元數據。此選項計算狀態並更新元數據,使其與實際數據一致。執行此命令後,下一個自動分配的標識值將從開始+(n+1)一步,在那裏n最小值是否滿足開始+n一步> =max ()(積極的一步)。

      此選項僅支持Delta Lake表上的標識列。

  • 刪除列

    要求:SQL倉庫版本2022.25或更高版本。此版本可在預覽頻道中獲得。

    在Delta Lake表中刪除一個或多個列或字段。

    刪除列或字段時,必須刪除相關檢查約束和生成的列。

    下降|如果存在column_identifier|field_name(,...
    • 如果存在

      當你指定如果存在, Databricks SQL忽略刪除不存在的列的嚐試。否則,刪除不存在的列將導致錯誤。

    • column_identifier

      現有列的名稱。

    • field_name

      現有字段的完全限定名。

  • 重命名列

    重命名Delta Lake表中的列或字段。

    重命名列或字段時,還需要更改相關檢查約束和生成的列。

    重命名column_identifierto_column_identifier|field_nameto_field_identifier
  • 添加約束constraint_name檢查(條件

    向Delta Lake表添加檢查約束。

    • constraint_name

      在表中惟一的標識符。

    • 檢查(條件

      返回布爾值的確定性表達式。

      條件可以由字麵量、表中的列標識符和確定性的內置SQL函數或操作符組成,除了:

      條件不能包含子查詢

      要在Databricks中滿足CHECK約束,必須計算為真正的

      Delta Lake對新數據和現有數據驗證了檢查約束的有效性。如果任何現有行違反了約束,將引發一個錯誤。

  • 刪除約束[IF EXISTS] constraint_name

    從Delta Lake表中移除檢查約束。

    • 如果存在

      要求:SQL倉庫版本2022.25或更高版本。此版本可在預覽頻道中獲得。

      當你指定如果存在, Databricks SQL會忽略刪除不存在的約束的嚐試。否則,不存在的約束將導致錯誤。

      之前SQL倉庫版本2022.25如果存在是隱含的。

    • constraint_name

      要刪除的約束的名稱。

  • 添加分區

    如果指定,則向表中添加一個或多個分區。Delta Lake表不支持添加分區。

    添加如果存在分區條款位置路徑...
    • 如果不存在

      一個可選的子句,指示Databricks SQL在分區已經存在時忽略該語句。

    • 分區條款

      需要添加的分區。分區鍵必須與表的分區匹配,並與值相關聯。如果分區已經存在,則會引發錯誤,除非如果存在已指定。

    • 位置路徑

      路徑必須是STRING字麵值,表示指向分區的可選位置。

      如果沒有指定位置,則位置將從表的位置和分區鍵派生。

      如果位置上存在文件,則它們將填充分區,並且必須與data_source表及其選項的。

  • 刪除分區

    如果指定此子句,則從表中刪除一個或多個分區,並可選擇刪除分區位置上的任何文件。

    Delta Lake表不支持刪除分區。

    下降如果存在分區條款(,...清洗
    • 如果存在

      當你指定如果存在數據庫將忽略刪除不存在分區的嚐試。否則,不存在的分區將導致錯誤。

    • 分區條款

      指定要刪除的分區。如果隻標識了部分分區,則刪除一部分分區。

    • 清洗

      如果設置了,表編目必須通過跳過Trash文件夾來刪除分區數據,即使編目已經配置了Trash文件夾。該選項僅適用於托管表。隻有在下列情況下才有效:

      文件係統支持垃圾文件夾。已為將刪除的分區移動到Trash文件夾配置了目錄。AWS S3中沒有垃圾文件夾,因此無效。

      刪除分區後,不需要手動刪除文件。

  • 重命名分區

    替換分區的鍵。

    Delta Lake表不支持重命名分區。

    from_partition_clause重命名to_partition_clause
  • 恢複分區

    本條款不適用於Delta Lake表。

    指示Databricks SQL掃描表的位置,並將已經直接添加到文件係統中的文件添加到表中。

  • 設置TBLPROPERTIES

    設置或重置一個或多個用戶定義的屬性。

  • 設置TBLPROPERTIES

    刪除一個或多個用戶定義的屬性。

  • 設置的位置

    移動分區或表的位置。

    Delta Lake不支持移動Delta Lake表的單個分區。

    分區條款位置路徑
    • 分區條款

      可選地標識要更改其位置的分區。如果省略了分區的命名,Databricks將移動表的位置。

    • 位置路徑

      路徑必須是STRING字麵值。指定分區或表的新位置。

      原始位置的文件將被刪除被轉移到新的位置。

  • 所有者主要

    將表的所有權轉移到主要

例子

有關Delta Lake添加和修改列示例,請參見

——RENAME表>描述學生col_namedata_type評論----------------------- --------- -------的名字字符串rollnoint年齡int分區信息col_namedata_type評論年齡int>改變表格學生重命名StudentInfo——重命名表後>描述StudentInfocol_namedata_type評論----------------------- --------- -------的名字字符串rollnoint年齡int分區信息col_namedata_type評論年齡int——重命名分區>顯示分區StudentInfo分區---------年齡10年齡11年齡12>改變表格默認的StudentInfo分區年齡“十”重命名分區年齡“15”);——重命名分區後>顯示分區StudentInfo分區---------年齡11年齡12年齡15——向表中添加新列>描述StudentInfocol_namedata_type評論----------------------- --------- -------的名字字符串rollnoint年齡int分區信息col_namedata_type評論年齡int>改變表格StudentInfo添加字符串強加於人時間戳);——向表中添加新列後>描述StudentInfocol_namedata_type評論----------------------- --------- -------的名字字符串rollnoint字符串強加於人時間戳年齡int分區信息col_namedata_type評論年齡int——向表中添加一個新分區>顯示分區StudentInfo分區---------年齡11年齡12年齡15>改變表格StudentInfo添加如果存在分區年齡18);——在向表中添加一個新分區之後>顯示分區StudentInfo分區---------年齡11年齡12年齡15年齡18——從表中刪除一個分區>顯示分區StudentInfo分區---------年齡11年齡12年齡15年齡18>改變表格StudentInfo下降如果存在分區年齡18);——去掉表的分區後>顯示分區StudentInfo分區---------年齡11年齡12年齡15——向表中添加多個分區>顯示分區StudentInfo分區---------年齡11年齡12年齡15>改變表格StudentInfo添加如果存在分區年齡18分區年齡20.);——向表中添加多個分區後>顯示分區StudentInfo分區---------年齡11年齡12年齡15年齡18年齡20.——ALTER或CHANGE列>描述StudentInfocol_namedata_type評論+-----------------------+---------+-------的名字字符串rollnoint字符串強加於人時間戳年齡int分區信息col_namedata_type評論年齡int改變表格StudentInfo改變的名字評論“新評論”——在ALTER或CHANGE COLUMNS之後>描述StudentInfocol_namedata_type評論----------------------- --------- -----------的名字字符串評論rollnoint字符串強加於人時間戳年齡int分區信息col_namedata_type評論年齡int——重命名列>改變表格StudentInfo重命名的名字FirstName——在RENAME列之後>描述StudentInfocol_namedata_type評論----------------------- --------- -----------FirstName字符串評論rollnoint字符串強加於人時間戳年齡int分區信息col_namedata_type評論年齡int——更改文件位置>改變表格dbxtab1分區一個' 1 'b' 2 '位置“/道路/ /部分/方式”——設置表屬性>改變表格dbxtab1TBLPROPERTIES“贏家”“失敗者”);——刪除表屬性>改變表格dbxtab1設置TBLPROPERTIES“贏家”);