使用查詢同盟時,查詢會使用 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 目錄管理存取權。
支持的數據源
查詢同盟支援下列來源的連線:
- MySQL
- PostgreSQL
- Teradata
- Oracle
- 亞馬遜紅移
- Salesforce 資料 360
- Snowflake
- Microsoft SQL 伺服器
- Azure Synapse (SQL 數據倉儲)
- 谷歌大查詢
- Databricks
連線需求
工作區需求:
- 已為 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/connections 和 Unity Catalog 命令。
需要的許可權:中繼存放區系統管理員或擁有CREATE CONNECTION許可權的使用者。
目錄檢視器
在您的 Azure Databricks 工作區中,按兩下
目錄。
在 目錄 窗格頂端,單擊
新增 圖標,然後從選單中選取 新增連線。或者,從 [快速存取] 頁面,按兩下 [外部數據 >] 按鈕,移至 [連線] 索引卷標,然後按兩下 [建立連線]。
輸入使用者易記的 [連線名稱]。
選取 [連線類型] (資料庫提供者,例如 MySQL 或 PostgreSQL)。
(選擇性) 新增註解。
按 [下一步]。
輸入連線屬性(例如主機資訊、路徑和存取認證)。
每個連接類型都需要不同的連線資訊。 請參閱連線類型的文章,它列在左側的目錄中。
點選 「建立連線」。
輸入外國目錄的名稱。
(選擇性)按兩下 [ 測試連線 ] 以確認其運作正常。
點選 「建立目錄」。
選取使用者可以存取您所建立目錄的工作區。 您可以選取 [所有工作區都有存取權],或點擊 [指派給工作區],選取工作區,然後點擊 [指派]。
將 擁有者 變更為可以管理目錄中所有物件存取權的人。 在文字框中開始輸入對象,然後在搜尋結果中點擊該對象。
對目錄授予許可權。 請點擊授與:
- 指定可存取目錄中對象的 主體 。 在文字框中開始輸入對象,然後在搜尋結果中點擊該對象。
- 選取 權限預設,以授與每個主體。 根據預設,所有帳戶用戶都會被授與
BROWSE。- 從下拉功能表中選取 [數據讀取器],以授與目錄中物件
read許可權。 - 從下拉功能表中選取 資料編輯器,以授予
read和modify目錄中對象的權限。 - 手動選取要授與的許可權。
- 從下拉功能表中選取 [數據讀取器],以授與目錄中物件
- 請按一下 授權。
- 按 [下一步]。
- 在 [元數據] 頁面上,指定標籤的鍵-值配對。 如需詳細資訊,請參閱在 Unity Catalog 中將標籤套用到可保護的物件。
- (選擇性) 新增註解。
- 點選 [儲存]。
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 特權。
目錄檢視器
在您的 Azure Databricks 工作區中,按一下
以開啟目錄總管。
在「目錄」窗格頂端,按一下「
「新增資料」圖示,然後從功能表中選取「建立目錄」。或者,從 [ 快速存取] 頁面按兩下 [ 目錄] 按鈕,然後按下 [ 建立目錄 ] 按鈕。
請按照建立目錄中的指示來建立外部目錄。
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 資源配額的使用情況。