共用方式為


什麼是查詢同盟?

使用查詢同盟時,查詢會使用 JDBC API 向下推送至外部資料庫。 查詢會在 Databricks 和使用遠端計算中執行。 查詢同盟用於 MySQL、PostgreSQL、BigQuery、Redshift、Teradata 等來源。

查詢同盟概觀圖表

為什麼要使用 Lakehouse 聯盟?

Lakehouse 強調數據的集中儲存,以減少數據冗餘與隔離。 您的組織在生產環境中可能有許多數據系統,而且您可能會想要查詢連線系統中的數據,原因有很多:

  • 隨選報告。
  • 概念驗證工作。
  • 新 ETL 管線或報表的初步探討階段。
  • 在漸進移轉期間支援工作負載。

在這些案例中,查詢同盟可讓您更快速地深入解析,因為您可以就地查詢資料,並避免複雜且耗時的 ETL 處理。

查詢聯邦適用於以下用例:

  • 您不想將數據內嵌至 Azure Databricks。
  • 您希望查詢利用外部資料庫系統中的計算。
  • 您想要 Unity 目錄介面和數據控管的優點,包括細部訪問控制、數據譜系和搜尋。

查詢同盟與 Lakeflow Connect

查詢同盟可讓您在不移動數據的情況下查詢外部數據源。 Databricks 建議使用受控連接器進行擷取,因為它們會調整以容納高數據量、低延遲查詢和第三方 API 限制。 不過,您可能想要查詢資料而不移動數據。 當您在選擇管理的資料擷取連接器和查詢聯邦時,若需要進行即席報告或在 ETL 管線上進行概念驗證工作,請選擇查詢聯邦。

查詢同盟設定概觀

若要使用 Lakehouse Federation 讓數據集可供只讀查詢,請建立下列項目:

  • 連接是一個在 Unity Catalog 中可設為安全的物件,指定存取外部資料庫系統的路徑和憑證。
  • 外部目錄是 Unity 目錄中的安全性實體物件,可鏡像外部數據系統中的資料庫,可讓您對 Azure Databricks 工作區中的該數據系統執行只讀查詢,並使用 Unity 目錄管理存取權。

支持的數據源

查詢同盟支援下列來源的連線:

連線需求

工作區需求:

  • 已為 Unity Catalog 啟用了工作區。

計算需求:

  • 您的計算資源與目標資料庫系統之間的網路連接能力。 請參閱 Lakehouse Federation 的網路建議
  • Azure Databricks 計算必須使用 Databricks Runtime 13.3 LTS 或更新版本和 標準專用 存取模式。
  • SQL 倉儲必須是專業或無伺服器,且必須使用 2023.40 或更新版本。

需要的權限:

  • 若要建立連線,您必須是中繼存放區系統管理員,或是具有附加至工作區之 Unity 目錄中繼存放區 CREATE CONNECTION 許可權的使用者。
  • 若要建立外來目錄,您必須具有中繼存放區的 CREATE CATALOG 許可權,並且必須是連線的擁有者或具有該連線的 CREATE FOREIGN CATALOG 特權。

在後續每個以任務為基礎的章節中,會指定額外的權限要求。

建立連線

連接會指定用來存取外部資料庫系統的路徑和認證。 若要建立連線,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用目錄總管或 CREATE CONNECTION SQL 命令。

Note

您也可以使用 Databricks REST API 或 Databricks CLI 來建立連線。 請參閱 POST /api/2.1/unity-catalog/connectionsUnity Catalog 命令

需要的許可權:中繼存放區系統管理員或擁有CREATE CONNECTION許可權的使用者。

目錄檢視器

  1. 在您的 Azure Databricks 工作區中,按兩下 [資料] 圖示。目錄

  2. 目錄 窗格頂端,單擊 新增或加號圖示新增 圖標,然後從選單中選取 新增連線

    或者,從 [快速存取] 頁面,按兩下 [外部數據 >] 按鈕,移至 [連線] 索引卷標,然後按兩下 [建立連線]。

  3. 輸入使用者易記的 [連線名稱]

  4. 選取 [連線類型] (資料庫提供者,例如 MySQL 或 PostgreSQL)。

  5. (選擇性) 新增註解。

  6. [下一步]。

  7. 輸入連線屬性(例如主機資訊、路徑和存取認證)。

    每個連接類型都需要不同的連線資訊。 請參閱連線類型的文章,它列在左側的目錄中。

  8. 點選 「建立連線」

  9. 輸入外國目錄的名稱。

  10. (選擇性)按兩下 [ 測試連線 ] 以確認其運作正常。

  11. 點選 「建立目錄」

  12. 選取使用者可以存取您所建立目錄的工作區。 您可以選取 [所有工作區都有存取權],或點擊 [指派給工作區],選取工作區,然後點擊 [指派]

  13. 擁有者 變更為可以管理目錄中所有物件存取權的人。 在文字框中開始輸入對象,然後在搜尋結果中點擊該對象。

  14. 對目錄授予許可權。 請點擊授與

    1. 指定可存取目錄中對象的 主體 。 在文字框中開始輸入對象,然後在搜尋結果中點擊該對象。
    2. 選取 權限預設,以授與每個主體。 根據預設,所有帳戶用戶都會被授與 BROWSE
      • 從下拉功能表中選取 [數據讀取器],以授與目錄中物件 read 許可權。
      • 從下拉功能表中選取 資料編輯器,以授予 readmodify 目錄中對象的權限。
      • 手動選取要授與的許可權。
    3. 請按一下 授權
    4. [下一步]。
    5. 在 [元數據] 頁面上,指定標籤的鍵-值配對。 如需詳細資訊,請參閱在 Unity Catalog 中將標籤套用到可保護的物件
    6. (選擇性) 新增註解。
    7. 點選 [儲存]。

SQL

在筆記本或 SQL 查詢編輯器中執行下列命令。 此範例適用於 PostgreSQL 資料庫的連線。 選項會因連線類型而有所不同。 請參閱連線類型的文章,它列在左側的目錄中。

CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

建議您針對認證等敏感性值使用 Azure Databricks 秘密 ,而不是純文本字串。 例如:

CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

如需設定祕密的相關資訊,請參閱祕密管理

如需管理現有連線的資訊,請參閱 Lakehouse 聯邦的連線管理

建立外部目錄

Note

如果您使用 UI 來建立與數據來源的連線,則會包括外來目錄的建立,而且您可以略過此步驟。

外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。 若要建立外部目錄,您可以使用已定義的數據源連線。

若要建立外部目錄,您可以在 Azure Databricks 筆記本或 SQL 查詢編輯器中使用目錄總管或 CREATE FOREIGN CATALOG SQL 命令。 您也可以使用 Unity 目錄 API。 請參閱 Azure Databricks 參考檔

外部目錄元數據會在每次與目錄互動時同步到 Unity Catalog。 如需 Unity 目錄與數據來源之間的資料類型對應,請查看每個數據源檔的 [資料類型對應 ] 區段。

必要權限:對中繼存放區的 CREATE CATALOG 權限,以及連線的所有權或對連線的 CREATE FOREIGN CATALOG 特權。

目錄檢視器

  1. 在您的 Azure Databricks 工作區中,按一下 [資料] 圖示以開啟目錄總管

  2. 「目錄」窗格頂端,按一下「新增」或加號圖示新增資料」圖示,然後從功能表中選取「建立目錄」。

    或者,從 [ 快速存取] 頁面按兩下 [ 目錄] 按鈕,然後按下 [ 建立目錄 ] 按鈕。

  3. 請按照建立目錄中的指示來建立外部目錄。

SQL

在筆記本或 SQL 查詢編輯器中執行下列 SQL 命令。 括弧中的項目是選擇性的。 替換占位符值:

  • <catalog-name>:Azure Databricks 中目錄的名稱。
  • <connection-name>:指定數據源、路徑和存取認證的 連接物件
  • <database-name>:您想要在 Azure Databricks 中映射為目錄的資料庫名稱。 MySQL 不需要,其使用兩層命名空間。
  • <external-catalog-name>Databricks-to-Databricks 僅限:您所鏡像的外部 Databricks 工作區中的目錄名稱。 請參閱 建立外部目錄
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

如需管理及使用外部目錄的詳細資訊,請參閱 管理及使用外部目錄

使用具體化檢視從外部數據表載入數據

當您建立具體化檢視時,Databricks 建議使用查詢同盟載入外部數據。 請參閱 具體化檢視

當您使用查詢同盟時,用戶可以參考同盟數據,如下所示:

CREATE MATERIALIZED VIEW xyz AS SELECT * FROM federated_catalog.federated_schema.federated_table;

檢視系統產生的同盟查詢

查詢同盟會將 Databricks SQL 語句轉譯成可向下推送至同盟數據源的語句。 若要檢視產生的 SQL 語句,請按兩下 查詢設定檔圖表檢視上的外部資料源掃描節點,或執行 EXPLAIN FORMATTED SQL 語句。 有關涵蓋範圍,請參閱每個數據來源文件中支援的下推一節。

Limitations

  • 查詢是唯讀的。

    唯一的例外狀況是使用 Lakehouse 同盟來同盟工作區的舊版 Hive 中繼存放區 (目錄同盟)。 該案例中的外部數據表是可寫入的。 請參閱 在同盟Hive中繼存放區中寫入外部目錄的意義為何?

  • 連線的節流是使用 Databricks SQL 並發查詢限制來決定。 每個連線不受倉庫之間的任何限制。 請參閱排程和自動擴展邏輯

  • 不支援在 Unity 目錄中具有無效名稱的數據表和架構,而且在建立外部目錄時會由 Unity 目錄忽略。 請參閱 限制中的命名規則和限制清單。

  • 數據表名稱和架構名稱會轉換成 Unity 目錄中的小寫。 如果這會導致名稱衝突,Databricks 無法保證哪一個對象會匯入外部目錄。

  • 針對所參考的每個外部數據表,Databricks 會排程遠端系統中的子查詢,以從該數據表傳回數據子集,然後透過單一數據流將結果傳回至一個 Databricks 執行程式工作。 如果結果集太大,執行程式可能會用盡記憶體。

  • 專用存取模式(先前為單一使用者存取模式)僅適用於擁有連線的使用者。

  • Lakehouse 同盟無法對 Azure Synapse 或 Redshift 連線的外部表執行具大小寫區分的識別符同盟。

資源配額

Azure Databricks 會在所有 Unity Catalog 可安全的物件上強制執行資源配額。 這些配額列在資源限制中。 外部目錄及其包含的所有物件都會包含在總配額使用量中。

如果你預期超過這些資源限制,請連絡你的 Azure Databricks 帳戶團隊。

您可以使用 Unity 目錄資源配額 API 來監視配額使用量。 請參閱 監控 Unity Catalog 資源配額的使用情況

其他資源