Share via


使用 Unity 目錄搭配差異即時資料表管線

重要

Unity 目錄的差異即時資料表支援處於公開預覽狀態。

除了將數據表保存到Hive中繼存放區的現有支援之外,您還可以將 Unity 目錄與 Delta Live Tables 管線搭配使用,以:

  • 在 Unity 目錄中定義目錄,其中您的管線會保存資料表。
  • 從 Unity 目錄資料表讀取數據。

您的工作區可以包含使用 Unity 目錄或 Hive 中繼存放區的管線。 不過,單一管線無法同時寫入 Hive 中繼存放區和 Unity 目錄,而且現有的管線無法升級為使用 Unity 目錄。 未使用 Unity 目錄的現有管線不會受到此預覽的影響,而且會繼續使用已設定的儲存位置將數據保存到 Hive 中繼存放區。

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

您也可以使用 Databricks Runtime 13.3 LTS 和更新版本或 SQL 倉儲,從共用 Unity 目錄叢集查詢在管線中建立的數據表。 無法從指派或沒有隔離叢集查詢數據表。

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

需求

若要從 Delta Live Tables 管線在 Unity 目錄中建立數據表,需要下列專案:

  • 您必須擁有 USE CATALOG 目標目錄的許可權。
  • 如果您的管線建立具體化檢視,則必須在目標架構中擁有 CREATE MATERIALIZED VIEWUSE SCHEMA 許可權。
  • 如果您的管線建立串流數據表,則必須在目標架構中擁有 CREATE TABLEUSE SCHEMA 許可權。
  • 如果未在管線設定中指定目標架構,您必須在目標目錄中至少有一個架構擁有 CREATE MATERIALIZED VIEWCREATE TABLE 許可權。

限制

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

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

  • 無法使用Hive中繼存放區的現有管線升級為使用 Unity 目錄。 若要移轉寫入Hive中繼存放區的現有管線,您必須建立新的管線,並從數據源重新內嵌數據。

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

  • 不支援第三方連結庫和 JAR。

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

  • 在 Delta Live Tables 管線中建立的具體化檢視不能當做該管線外部的串流來源使用,例如,在另一個管線或下游筆記本中。

  • 只有在預覽通道中才支持發行至指定受控儲存位置的架構。

  • 如果管線發行至具有受控記憶體位置的架構,則架構可以在後續更新中變更,但只有在更新的架構使用與先前指定之架構相同的儲存位置時,才能變更架構。

  • 如果目標架構指定儲存位置,所有數據表都會儲存在那裡。 如果未指定架構儲存位置,當目標目錄指定數據表時,數據表會儲存在目錄儲存位置。 如果未指定架構和目錄儲存位置,數據表會儲存在發行數據表之中繼存放區的根儲存位置。

  • 目錄總管中的 [ 歷程記錄 ] 索引標籤不會顯示串流數據表和具體化檢視的歷程記錄。

  • LOCATION定義資料表時不支援 屬性。

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

  • Python UDF 支援處於 公開預覽狀態。 若要使用 Python UDF,您的管線必須使用 預覽通道

  • 您無法將差異共用與已發行至 Unity 目錄的差異即時資料表具體化檢視或串流數據表搭配使用

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

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

  • 已啟用 Unity 目錄的管線不支援單一節點叢集。 因為 Delta Live Tables 可能會建立單一節點叢集來執行較小的管線,因此您的管線可能會失敗,並出現參考 single-node mode的錯誤訊息。 如果發生這種情況,請確定您在設定計算設定至少指定一個背景工作角色。

  • 在已啟用 Unity 目錄的管線中建立的數據表無法從指派或沒有隔離叢集進行查詢。 若要查詢 Delta Live Tables 管線所建立的數據表,您必須使用 Databricks Runtime 13.3 LTS 和更新版本或 SQL 倉儲的共用存取模式叢集。

  • Delta Live Tables 會使用共用存取模式叢集來執行已啟用 Unity 目錄的管線。 已啟用 Unity 目錄的管線無法在指派的叢集上執行。 若要瞭解與 Unity 目錄共用存取模式的限制,請參閱 Unity 目錄上的共用存取模式限制。

  • 您無法將 資料列篩選或數據行遮罩 與具體化檢視或串流數據表搭配發行至 Unity 目錄。

注意

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

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

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

現有功能的變更

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

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

從 Delta Live Tables 管線將數據表寫入 Unity 目錄

注意

如果您未選取管線的目錄和目標架構,數據表不會發佈至 Unity 目錄,而且只能由相同管線中的查詢存取。

若要將數據表寫入 Unity 目錄,當您建立管線時,請在 [儲存體 選項] 下選取 [Unity 目錄],在 [目錄] 下拉功能表中選取目錄,然後選取現有的架構,或在 [目標架構] 下拉功能表中輸入新架構的名稱。 若要瞭解 Unity 目錄目錄,請參閱 目錄。 若要瞭解 Unity 目錄中的架構,請參閱 架構

將數據內嵌至 Unity 目錄管線

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

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

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

從 Unity 目錄數據表進行批次擷取

SQL

CREATE OR REFRESH LIVE TABLE
  table_name
AS SELECT
  *
FROM
  my_catalog.my_schema.table1;

Python

@dlt.table
def table_name():
  return spark.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 目錄的管線可以使用目錄從 Hive 中繼存放區資料表 hive_metastore 讀取資料:

SQL

CREATE OR REFRESH LIVE TABLE
  table_name
AS SELECT
  *
FROM
  hive_metastore.some_schema.table;

Python

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

從自動載入器擷取數據

SQL

CREATE OR REFRESH STREAMING TABLE
  table_name
AS SELECT
  *
FROM
  cloud_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.live_table
TO
  `user@databricks.com`

撤銷數據表上的選取

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

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

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

檢視管線的譜系

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

對於已啟用 Unity 目錄之 Delta Live Tables 管線中的具體化檢視或串流數據表,如果管線可從目前工作區存取管線,則目錄總管歷程 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;