共用方式為


使用 Unity Catalog 搭配您的 Delta Live Tables 管線

重要

Delta 即時表支援 Unity Catalog 現已在 公開預覽

Databricks 建議使用 Unity 目錄設定 Delta Live Tables 管線。

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

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

注意

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

需求

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

  • USE CATALOG 目標目錄的權限。
  • 如果您的管線建立了 CREATE MATERIALIZED VIEW,則需要在目標架構上擁有 USE SCHEMA 的許可權。
  • 如果您的管線建立 CREATE TABLE,則需要授予目標架構的 USE SCHEMA 許可權。

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

執行啟用了 Unity Catalog 的管線所需的運算:

  • 共用存取模式叢集。 已啟用 Unity Catalog 的管線無法在‘指派’(assigned)單一使用者叢集上執行。 請參閱 Unity 目錄上的 共用存取模式限制。

使用 Unity Catalog 查詢由 Delta Live Tables 管線創建的資料表所需的計算量(包括串流資料表和具現化檢視表)包含下列其中一項:

  • SQL 倉儲

  • Databricks Runtime 13.3 LTS 或更新版本上的共用存取模式叢集。

  • 如果在單一使用者叢集上啟用微調訪問控制,則單一使用者(或「已指派」)存取模式叢集(也就是叢集是在 Databricks Runtime 15.4 或更新版本上執行,且已啟用工作區的無伺服器計算)。 如需詳細資訊,請參閱 單一用戶計算的精細訪問控制。

  • 只有在資料表擁有者執行查詢時,13.3 LTS 到 15.3 版本的系統上,單一使用者(或「指派」)存取模式的叢集才能運作。

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

限制

使用 Unity 目錄搭配 Delta 實時資料表時,有下列限制:

  • 根據預設,只有管線擁有者和工作區管理員可以從執行已啟用 Unity 目錄之管線的叢集檢視驅動程序記錄。 若要允許其他使用者存取驅動程式記錄,請參閱 允許非系統管理員使用者從已啟用 Unity 目錄的管線檢視驅動程式記錄

  • 使用 Hive metastore 的現有管線無法升級為使用 Unity Catalog。 若要移轉寫入到 Hive 中繼存放區的現有管線,您必須建立新的管線,並從資料來源中重新內嵌資料。 請參閱 藉由複製 Hive 中繼存放區管線建立 Unity 目錄管線。

  • 您無法在附加至 Unity Catalog 公開預覽期間所建立的中繼存放區的工作區中建立已啟用 Unity Catalog 的管道。 請參閱升級至權限繼承

  • 不支援 JAR。 僅支援第三方 Python 連結庫。 請參閱 如何管理 Delta Live Tables 管線的 Python 相依性

  • 不支援修改串流資料表架構的數據操作語言 (DML) 查詢。

  • 在 Delta Live Tables 管線中建立的物化視圖,不能在該管線外作為串流來源使用,例如在另一個管線或下游筆記本中。

  • 具體化檢視和串流數據表的數據會儲存在包含架構的儲存位置。 如果未指定架構儲存位置,數據表會儲存在目錄儲存位置。 如果未指定架構和目錄儲存位置,數據表會儲存在中繼存放區的根記憶體位置。

  • 在 [目錄總管] 的 [歷程記錄] 索引標籤不顯示具現化檢視的歷程記錄。

  • 定義數據表時不支援 LOCATION 屬性。

  • 已啟用 Unity Catalog 目錄的管線無法發佈至 Hive 中繼存放區。

  • Python UDF 支援處於公開預覽狀態。

  • 您無法將 Delta 分享 與發佈至 Unity 目錄的 Delta 即時表格的具體化檢視或串流表格一起使用。

  • 您無法在管線或查詢中使用 event_log資料表值函式 來存取多個管線的事件記錄。

  • 您無法與其他使用者共用透過 event_log資料表值函式所建立的檢視

注意

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

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

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

我可以將 Hive 中繼資料存放區和 Unity Catalog 管線一起使用嗎?

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

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

除非在本文件中另有指定,否則所有現有的資料來源和 Delta Live Tables 功能都支援使用 Unity Catalog 的管線。 使用 Unity 目錄的管線支援 PythonSQL 介面。

現有功能的變更

當 Delta Live Tables 設定為將數據保存到 Unity 目錄時,數據表的生命週期是由 Delta Live Tables 管線所管理。 因為管道會管理資料表的生命週期和權限:

  • 當從 Delta Live Tables 管線定義中移除表格時,下一次管線更新會從 Unity 目錄中移除對應的具現化檢視或串流表格項目。 實際數據會保留一段時間,以便在錯誤刪除時加以復原。 您可以將具體化檢視或串流數據表新增回管線定義,以復原數據。
  • 刪除 Delta Live Tables 管線會導致刪除該管線中定義的所有數據表。 由於這項變更,Delta Live Tables 的 UI 已更新,提示您確認刪除管線。
  • 內部支持數據表,包括用來支援 APPLY CHANGES INTO的數據表,用戶無法直接存取。

從 Delta Live Tables 管道將表格寫入 Unity Catalog

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

將數據導入至 Unity Catalog 管線

您配置為使用 Unity Catalog 的管線可以讀取以下來源的資料:

  • Unity Catalog 管理與外部的表格、視圖、具體化視圖和串流表格。
  • Hive 中繼存放區數據表和檢視。
  • 使用 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;

Python

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

從 Unity 目錄資料表串流變更

SQL

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

Python

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

從 Hive 中繼存放區內嵌資料

使用 Unity Catalog 的管線可以透過 hive_metastore 目錄,從 Hive 中繼存儲庫資料表中讀取資料:

SQL

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

Python

@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"
  )

Python

@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 類別目錄中管理權限

授予資料表的選取權限

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 }

檢視管線的譜系

Delta Live Tables 管線中表格的數據譜系會顯示在 Catalog Explorer 中。 目錄總管歷程 UI 會顯示在已啟用 Unity 目錄之管線中具體化檢視或串流數據表的上游和下游數據表。 若要深入瞭解 Unity 目錄譜系,請參閱 使用 Unity 目錄擷取和檢視數據譜系。

對於啟用了 Unity Catalog 的 Delta Live Tables 管線中的物化檢視或串流表,如果這些管線能從目前工作區存取,則目錄總管系統的來源追蹤 UI 也會連結到產生這些物化檢視或串流表的管線。

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

您可以使用 數據操作語言 (DML) 語句,包括插入、更新、刪除和合併語句,修改發佈至 Unity 目錄的串流數據表。 支援對串流資料表進行 DML 查詢可以實現多種使用情境,例如更新資料表以符合《歐盟一般資料保護法規》(GDPR)。

注意

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

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

刪除具有特定 ID 的記錄:

DELETE FROM my_streaming_table WHERE id = 123;

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

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

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

重要

這項功能處於公開預覽狀態

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

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

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

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

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

行為

以下是在 Delta Live Tables 管線中使用數據行篩選或數據列遮罩時的重要細節:

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

可檢視性

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