約束條款

適用於:勾選“是”磚的SQL勾選“是”磚運行時

預覽

此功能已在公共預覽

增加了一個信息主鍵或信息的外鍵的一部分創建表聲明。

要向Delta Lake表添加檢查約束,請使用ALTER TABLE在創建表之後。

語法

使用table_constraint子句定義跨多列的約束,或將語法與列定義分開。

table_constraint約束的名字主要的關鍵key_column(,...constraint_option...|外國關鍵foreign_key_column(,...參考文獻parent_tableparent_column(,...foreign_key_option|constraint_option...

使用column_constraint子句來定義特定於單個列定義的約束。

column_constraint約束的名字主要的關鍵constraint_option...|外國關鍵參考文獻parent_tableparent_column(,...foreign_key_option|constraint_option...
constraint_option執行|可延期的|最初遞延|諾爾foreign_key_option匹配完整的|更新沒有行動|刪除沒有行動

為了兼容非標準SQL方言,可以指定啟用已經而不是執行可延期的最初遞延

參數

  • 約束的名字

    可選地指定約束的名稱。該名稱在模式中必須唯一。如果沒有提供名稱,Databricks將生成一個。

  • PRIMARY KEY (key_column[,…])[constraint - option][…]

    適用於:勾選“是”磚的SQL勾選“是”Databricks運行時11.1及以上版本

    增加了一個信息表的主鍵約束。一個表最多隻能有一個主鍵。

    主鍵列隱式定義為

    類中的表不支持主鍵約束hive_metastore目錄。

    • key_column

      主題表的一列。列名不能重複。

  • 主要的關鍵constraint_option[…]

    使用前麵的鍵列定義將單列主鍵約束添加到表中。

    column_constraint等於table_constraint

    主要的關鍵(key_column)constraint_option[…]

  • 外國關鍵(foreign_key_column(,…]參考文獻parent_tableparent_column(,…]foreign_key_option

    適用於:勾選“是”磚的SQL勾選“是”Databricks運行時11.1及以上版本

    增加了一個信息外鍵(引用完整性)約束到表。

    類中的表不支持外鍵約束hive_metastore目錄。

    隻在外鍵列排列上不同的外鍵約束是不允許的。

    • foreign_key_column

      主題表的一列。列名不能重複。每列的數據類型必須與匹配的類型相匹配parent_column.的列數必須與的列數匹配parent_columns.兩個外鍵不能共用一組相同的外鍵列。

    • parent_table

      指定外鍵引用的表。表必須有一個已定義的主要的關鍵約束,你必須擁有這個表。

    • parent_column

      父表中的列,是其主鍵的一部分。必須列出父表的所有主鍵列。

      類中給出的順序指定父列主要的關鍵定義。

    • 外國關鍵參考文獻parent_tableparent_columnforeign_key_option

      使用前麵的外鍵列定義將單列外鍵約束添加到表中。

      column_constraint等於table_constraint

      外國關鍵foreign_key_column參考文獻parent_tableparent_columnforeign_key_option

  • constraint_option

    列出約束的屬性。所有屬性都是可選的,但默認情況下是隱含的。每個屬性最多隻能指定一次。

    • 執行

      Databricks對現有或新行不采取強製操作。

    • 可延期的

      約束執行可以延遲。

    • 最初遞延

      約束強製被推遲。

    • 諾爾

      Databricks並不利用約束重寫查詢。

  • foreign_key_option

    列出特定於外鍵約束的屬性。所有屬性都是可選的,但默認情況下是隱含的。每個屬性最多隻能指定一次。

    • 匹配完整的

      要認為約束為真,所有列值必須為真

    • 更新沒有行動

      如果父節點主要的關鍵更新時,Databricks不采取任何限製更新或更新外鍵的操作。

    • 刪除沒有行動

      如果父行被刪除,Databricks不會對該操作進行限製、更新外鍵或刪除依賴行。

重要的

Databricks不強製主鍵或外鍵約束。在添加主鍵或外鍵之前,請確認鍵約束。您的攝取過程可以提供這樣的保證,或者您可以對您的數據進行檢查。

例子

——創建帶有主鍵的表>創建表格first_name字符串last_name字符串昵稱字符串約束persons_pk主要的關鍵first_namelast_name));——創建一個帶外鍵的表>創建表格寵物的名字字符串owner_first_name字符串owner_last_name字符串約束pets_persons_fk外國關鍵owner_first_nameowner_last_name參考文獻);用單列主鍵和係統生成的名稱創建一個表>創建表格beplay体育app下载地址customerid字符串主要的關鍵的名字字符串);——創建一個帶有names單列主鍵和named單列外鍵的表>創建表格訂單orderid長整型數字約束orders_pk主要的關鍵customerid字符串約束orders_beplay体育app下载地址customers_fk參考文獻beplay体育app下载地址);