共用方式為


搭配 DLT 管線使用 Unity Catalog

重要

Unity 目錄的 DLT 支援 公開預覽

Databricks 建議使用 Unity 目錄設定 DLT 管線。

使用 Unity 目錄設定的管線會將所有已定義的具體化檢視和串流數據表發佈至指定的目錄和架構。 Unity 目錄管線可以從其他 Unity 目錄數據表和磁碟區讀取。

若要管理 Unity 目錄管線所建立之資料表的許可權,請使用 GRANT 和 REVOKE

注意

本文討論管線目前預設發佈模式的功能。 在 2025 年 2 月 5 日之前建立的管線可能會使用舊版發佈模式,以及 LIVE 的虛擬架構。 請參閱 LIVE 架構 (舊版)

需求

若要在 Unity 目錄中的目標架構中建立串流資料表和具體化檢視,您必須具有架構和父目錄的下列許可權:

  • USE CATALOG 在目標目錄上的權限。
  • 如果您的管線建立 具體化檢視,則需要擁有對於目標架構的 CREATE MATERIALIZED VIEWUSE SCHEMA 權限。
  • 如果您的管線建立 串流數據表,則需在目標架構上擁有 CREATE TABLEUSE SCHEMA 的許可權。

如果您的管線建立新的架構,您必須擁有目標目錄的 USE CATALOGCREATE SCHEMA 許可權。

執行支援 Unity 目錄的管線所需的計算:

  • 標準存取模式(先前稱為共用存取模式)。 已啟用 Unity Catalog 的管線無法在專用計算平台(前稱為單一使用者計算)上執行。 請參閱 Unity 目錄 的標準存取模式限制

使用 Unity 目錄查詢 DLT 管線所建立之資料表所需的計算(包括串流數據表和具體化檢視表)包含下列任一項:

  • SQL 資料倉庫
  • Databricks Runtime 13.3 LTS 或更新版本的標準存取模式下的計算。
  • 專用存取模式計算,如果在專用計算上啟用更細緻的訪問控制(也就是說,它是在 Databricks Runtime 15.4 或更新版本上執行,且已啟用工作區的無伺服器計算)。 如需詳細資訊,請參閱 專用計算的精細存取控制(先前稱為單一使用者計算)
  • 只有在數據表擁有者執行查詢時,13.3 LTS 到 15.3 上的專用存取模式才會計算。

套用額外的計算限制。 請參閱後續章節。

限制

以下是搭配 DLT 使用 Unity 目錄時的限制:

  • 您無法在附加至在 Unity 目錄公開預覽期間建立的中繼存放區的工作區中建立啟用 Unity 目錄的管線。 請參閱 升級至權限繼承
  • 不支援 JAR。 僅支援第三方 Python 函式庫。 請參閱 管理 DLT 管線的 Python 相依性
  • 不支援修改串流數據表架構的數據作語言 (DML) 查詢。
  • 在 DLT 管線中建立的具現化視圖不能當做該管線外部的串流來源使用,例如在另一個管線或下游筆記本中。
  • 具體化檢視和串流數據表的數據會儲存在包含架構的儲存位置。 如果未指定架構儲存位置,數據表會儲存在目錄儲存位置。 如果未指定架構和目錄儲存位置,數據表會儲存在中繼存放區的根記憶體位置。
  • [目錄總管] [歷程記錄] 索引標籤不會顯示具體化檢視的歷程記錄。
  • 定義數據表時不支援 LOCATION 屬性。
  • 啟用了 Unity Catalog 的管線無法發佈至 Hive Metastore。
  • 您無法將 Delta Sharing 與發佈至 Unity Catalog 的 DLT 實體檢視或串流資料表搭配使用。

注意

支援具體化檢視的基礎檔案可能包含上游數據表的數據(包括可能的個人標識資訊),這些檔案不會出現在具體化檢視定義中。 此數據會自動新增至基礎記憶體,以支援具體化檢視的累加式重新整理。

由於具體化檢視的基礎檔案可能會有從上游數據表公開數據的風險,不屬於具體化檢視架構的一部分,因此 Databricks 建議不要與不受信任的下游取用者共用基礎記憶體。

例如,假設具現化檢視定義包含 COUNT(DISTINCT field_a) 子句。 即使具體化檢視定義只包含匯總 COUNT DISTINCT 子句,基礎檔案仍會包含 field_a的實際值清單。

我可以同時使用Hive Metastore和Unity Catalog管線嗎?

您的工作區可以包含使用 Unity Catalog 和傳統 Hive Metastore 的管線。 不過,單一管線無法寫入 Hive 中繼存放區和 Unity 目錄。 寫入 Hive 中繼存放區的現有管線無法升級為能使用 Unity Catalog。 若要移轉寫入Hive中繼存放區的現有管線,您必須建立新的管線,並從數據源重新內嵌數據。 請參閱 藉由複製 Hive 中繼存放區管線建立 Unity 目錄管線。

未使用 Unity 目錄的現有管線不會因建立配置 Unity 目錄的新管線而受到影響。 這些管線會使用設定的儲存位置,繼續將數據保存到Hive中繼存放區。

除非在本文件中另有說明,否則所有現有的資料來源和 DLT 功能都支援透過使用 Unity Catalog 的管道進行整合。 使用 Unity 目錄的管線支援 PythonSQL 介面。

現有功能的變更

當 DLT 設定為將資料保存到 Unity 目錄時,DLT 管線會管理資料表的生命週期和許可權。 因此:

  • 當數據表從管道定義中移除時,下一個管道更新將會標示對應的實體化檢視或串流數據表為非使用中。 非作用中的數據表仍可查詢,但不會更新。 若要清除具現化檢視或串流表格,您可以明確地 DROP 該表格。
    • 您可以使用 UNDROP 命令,在 7 天內復原任何已卸除的數據表。
    • 若要保留從下一次管線更新中從 Unity 目錄中移除實體化檢視或串流表條目的舊版行為,請將管線設定設為 "pipelines.dropInactiveTables": "true"。 實際數據會保留一段時間,以便在錯誤刪除時加以復原。 您可以將具體化檢視或串流數據表新增回管線定義,以在 7 天內復原數據。
  • 刪除 DLT 管線會導致刪除該管線中定義的所有資料表。 由於這項變更,DLT UI 會更新,提示您確認刪除管線。
  • 內部支持數據表,包括用來支援 APPLY CHANGES INTO的數據表,用戶無法直接存取。

從 DLT 管線將數據表寫入 Unity 目錄

若要將資料表寫入 Unity 目錄,您必須在工作區中設定管線以使其能夠運作。 當您 建立管線時,請選取 [Unity 目錄] 下的 [記憶體] 選項、在 [目錄] 下拉功能表中選取目錄,然後選取現有的架構,或在 [目標架構] 下拉功能表中輸入新架構的名稱。 若要瞭解 Unity 目錄目錄,請參閱 什麼是 Azure Databricks 中的目錄?。 若要瞭解 Unity 目錄中的架構,請參閱 什麼是 Azure Databricks 中的架構?

將數據匯入 Unity Catalog 管線

設定為使用 Unity Catalog 的資料管道可以從下列項目讀取資料:

  • Unity 目錄管理和外部數據表、檢視、具體化檢視和串流數據表。
  • Hive Metastore 資料表和檢視。
  • 使用 read_files() 函式從 Unity 目錄外部位置讀取的自動載入器。
  • Apache Kafka 和 Amazon Kinesis。

以下是從 Unity 目錄和 Hive 中繼存放區數據表讀取的範例。

從 Unity Catalog 資料表進行批次匯入

SQL

CREATE OR REFRESH MATERIALIZED VIEW
  table_name
AS SELECT
  *
FROM
  my_catalog.my_schema.table1;

@dlt.table
def table_name():
  return spark.read.table("my_catalog.my_schema.table")

從 Unity Catalog 資料表進行串流變更

SQL

CREATE OR REFRESH STREAMING TABLE
  table_name
AS SELECT
  *
FROM
  STREAM(my_catalog.my_schema.table1);

@dlt.table
def table_name():
  return spark.readStream.table("my_catalog.my_schema.table")

從Hive Metastore中攝取資料

使用 Unity Catalog 的管線可以透過 hive_metastore 目錄從 Hive Metastore 表中讀取資料:

SQL

CREATE OR REFRESH MATERIALIZED VIEW
  table_name
AS SELECT
  *
FROM
  hive_metastore.some_schema.table;

@dlt.table
def table3():
  return spark.read.table("hive_metastore.some_schema.table")

從自動載入器擷取數據

SQL

CREATE OR REFRESH STREAMING TABLE
  table_name
AS SELECT
  *
FROM
  read_files(
    <path-to-uc-external-location>,
    "json"
  )

@dlt.table(table_properties={"quality": "bronze"})
def table_name():
  return (
     spark.readStream.format("cloudFiles")
     .option("cloudFiles.format", "json")
     .load(f"{path_to_uc_external_location}")
 )

共用實體化視圖

根據預設,只有管線擁有者有權查詢管線所建立的數據集。 您可以讓其他用戶能夠使用 GRANT 語句來查詢數據表,而且您可以使用 REVOKE 語句來撤銷查詢存取權。 如需 Unity 目錄中權限的詳細資訊,請參閱 在 Unity 類別目錄中管理權限

授權資料表上的SELECT權限

GRANT SELECT ON TABLE
  my_catalog.my_schema.table_name
TO
  `user@databricks.com`

撤銷對資料表的查詢權限

REVOKE SELECT ON TABLE
  my_catalog.my_schema.table_name
FROM
  `user@databricks.com`

授與建立數據表或建立具體化檢視許可權

GRANT CREATE { MATERIALIZED VIEW | TABLE } ON SCHEMA
  my_catalog.my_schema
TO
  { principal | user }

檢視管線的譜系

DLT 管線中數據表的譜系會顯示在目錄瀏覽器中。 目錄探索器譜系 UI 會顯示在啟用 Unity Catalog 的管線中具現化檢視或串流資料表的上游和下游資料表。 若要深入瞭解 Unity 目錄譜系,請參閱 使用 Unity 目錄擷取和檢視數據譜系。

針對啟用了 Unity Catalog 的 DLT 管線中的具現化檢視或串流資料表,倘若管線可以從目前工作區存取,Catalog Explorer 衍生圖 UI 也會連結到產生這些具現化檢視或串流資料表的管線。

在串流數據表中新增、變更或刪除數據

您可以使用 數據作語言 (DML) 語句,包括插入、更新、刪除和合併語句,修改發佈至 Unity 目錄的串流數據表。 對串流數據表的 DML 查詢支援可啟用使用案例,例如更新數據表以符合一般數據保護規定(GDPR)。

注意

  • 不支援修改串流數據表之數據表架構的 DML 語句。 請確定您的 DML 語句不會嘗試演進數據表架構。
  • 更新串流數據表的 DML 語句只能在共用的 Unity 目錄叢集或 SQL 倉儲中使用 Databricks Runtime 13.3 LTS 和更新版本來執行。
  • 因為串流需要僅附加數據源,如果您的處理需要從具有變更的來源串流數據表進行串流處理(例如,透過 DML 語句),請在讀取來源串流數據表時設定 skipChangeCommits 旗標。 設定 skipChangeCommits 時,會忽略刪除或修改源數據表上記錄的交易。 如果您的處理不需要串流數據表,您可以使用具體化檢視表(沒有僅附加限制)作為目標數據表。

以下是 DML 語句的範例,可用來修改串流數據表中的記錄。

移除具有特定識別碼的記錄:

DELETE FROM my_streaming_table WHERE id = 123;

使用特定識別碼更新記錄:

UPDATE my_streaming_table SET name = 'Jane Doe' WHERE id = 123;

發行具有數據列篩選和數據行遮罩的數據表

重要

這項功能是 公眾預覽

數據列篩選 可讓您指定每當數據表掃描擷取數據列時,都會套用為篩選的函式。 這些篩選可確保後續查詢只會傳回篩選述詞評估為 true 的數據列。

資料行遮罩 可讓您在資料表掃描擷取數據列時遮罩資料行的值。 該數據行的未來查詢會傳回評估函式的結果,而不是數據行的原始值。 如需使用資料列篩選和資料行遮罩的詳細資訊,請參閱 使用資料列篩選和資料行遮罩篩選敏感資料

管理數據列篩選和數據行遮罩

具體化檢視和串流表上的行篩選器和列遮罩應該透過 CREATE OR REFRESH 語句來新增、更新或移除。

如需使用資料列篩選和數據行掩碼定義資料表的詳細語法,請參閱 DLT SQL 語言參考DLT Python 語言參考

行為

以下是在 DLT 管線中使用資料列篩選或欄位遮罩時的重要注意事項:

  • 重新整理為擁有者:當管線更新重新整理實體化檢視或串流資料表時,資料列篩選器和資料列遮罩函式會以管線擁有者的許可權執行。 這表示資料表更新會使用建立管線者的使用者安全性上下文。 使用管線擁有者的使用者上下文來評估用於檢查使用者上下文的函數(例如 CURRENT_USERIS_MEMBER)。
  • 查詢:在查詢具體化檢視或串流資料表時,檢查使用者內容的函式(例如 CURRENT_USERIS_MEMBER)會根據叫用者的使用者內容進行評估。 此方法會根據目前使用者的內容強制執行使用者特定的數據安全性和訪問控制。
  • 在包含數據列篩選和數據行遮罩的源數據表上建立具體化檢視時,具體化檢視的重新整理一律是完整重新整理。 完整重新整理會使用最新的定義,重新處理來源中可用的所有數據。 此程式會檢查源數據表上的安全策略會評估並套用最多 up-to日期數據和定義。

可觀察性

使用 DESCRIBE EXTENDEDINFORMATION_SCHEMA或目錄探索器來檢查應用於指定具體化檢視或串流數據表的現有數據行篩選和數據列遮罩。 此功能可讓使用者稽核和檢閱具體化檢視表和串流數據表的數據存取和保護措施。