共用方式為


與您的 Lakeflow 宣告式工作流程搭配使用 Unity Catalog

Databricks 建議使用 Unity 目錄設定 Lakeflow 宣告式管線。

使用 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 目錄的管線所需的計算:

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

使用 Unity Catalog 查詢由 Lakeflow 宣告式管線所建立的資料表(包括串流資料表和具體化檢視表)所需的計算包含以下其中之一:

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

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

限制

使用 Unity Catalog 搭配 Lakeflow 宣告式流水線時,有下列限制:

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

備註

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

由於具體化檢視的基礎檔案可能會有從上游數據表公開數據的風險,不屬於具體化檢視架構的一部分,因此 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中繼存放區。

除非在本檔中另有指定,否則所有現有的數據源和 Lakeflow 宣告式管線功能都支援使用 Unity 目錄的管線。 Python SQL 介面都支援使用 Unity Catalog 的管線。

現有功能的變更

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

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

從 Lakeflow 宣告式管線將數據表寫入 Unity 目錄

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

將數據匯入 Unity Catalog 管線

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

  • Unity 目錄管理和外部數據表、檢視、具體化檢視和串流數據表。
  • Hive Metastore 資料表和檢視。
  • 自動載入器使用 read_files() 函數從 Unity Catalog 的外部位置讀取。
  • 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 STREAM read_files(
  "/path/to/uc/external/location",
  format => "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 }

檢視管線的譜系

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

針對在啟用 Unity Catalog 的管線中產生的具體化檢視或串流數據表,如果該管線可從當前工作區存取,則目錄瀏覽器的血統 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 語句來新增、更新或移除。

如需使用數據列篩選和數據行遮罩定義數據表的詳細語法,請參閱 Lakeflow 宣告式管線 SQL 語言參考Lakeflow 宣告式管線 Python 語言參考

行為

以下是在使用 Lakeflow Declarative Pipelines 的資料列篩選或欄位遮罩時的重要詳細資訊:

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

可觀察性

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