什麼是 Lakehouse 同盟?
本文介紹 Lakehouse 同盟,此查詢同盟平臺可讓您使用 Azure Databricks 對多個外部數據源執行查詢。 它也會說明如何設定 Lakehouse 同盟 連線 ,並在 Unity 目錄中繼存放區中建立 外部目錄 。
什麼是 Lakehouse 同盟?
Lakehouse Federation 是 Azure Databricks 的查詢同盟平臺。 查詢同盟一詞描述一組功能,可讓用戶和系統對多個數據源執行查詢,而不需要將所有數據遷移至統一系統。
Azure Databricks 使用 Unity 目錄來管理查詢同盟。 您可以使用包含在 Pro SQL 倉儲、無伺服器 SQL 倉儲和 Databricks Runtime 叢集中的驅動程式,設定熱門資料庫解決方案的唯讀連線。 Unity 目錄的數據控管和數據譜系工具可確保針對 Azure Databricks 工作區中使用者所做的所有同盟查詢,管理及稽核數據存取。
為什麼要使用 Lakehouse 同盟?
Lakehouse 強調數據的集中儲存,以減少數據備援和隔離。 您的組織在生產環境中可能有許多數據系統,而且您可能會想要查詢連線系統中的數據,原因有很多:
- 隨選報表。
- 概念證明作業。
- 新 ETL 管線或報表的探勘階段。
- 在累加移轉期間支援工作負載。
在這些案例中,查詢同盟可讓您更快速地深入解析,因為您可以就地查詢資料,並避免複雜且耗時的 ETL 處理。
Lakehouse Federation 適用於下列情況的使用案例:
- 您不想將數據內嵌至 Azure Databricks。
- 您希望查詢利用外部資料庫系統中的計算。
- 您想要 Unity 目錄介面和數據控管的優點,包括細部訪問控制、數據譜系和搜尋。
Lakehouse 同盟設定概觀
若要使用 Lakehouse 同盟讓數據集可供只讀查詢,請建立下列專案:
- 連接,Unity 目錄中的安全性實體物件,指定存取外部資料庫系統的路徑和認證。
- 外部目錄是 Unity 目錄中的安全性實體物件,可鏡像外部數據系統中的資料庫,可讓您對 Azure Databricks 工作區中的該數據系統執行只讀查詢,並使用 Unity 目錄管理存取權。
支持的數據源
Lakehouse 同盟支援下列資料庫類型的連線:
- MySQL
- PostgreSQL
- Oracle
- Amazon Redshift
- Salesforce Data Cloud
- Snowflake
- Microsoft SQL Server
- Azure Synapse (SQL 數據倉儲)
- Google BigQuery
- Databricks
- Hive 中繼存放區同盟
連線需求
工作區需求:
- 已為 Unity 目錄啟用工作區。
計算需求:
- 從計算資源到目標資料庫系統的網路連線能力。 請參閱 Lakehouse 同盟的網路建議。
- 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 命令。
注意
您也可使用 Databricks REST API 或 Databricks CLI 來建立連線。 請參閱 POST /api/2.1/unity-catalog/connections 和 Unity 目錄命令。
需要的權限:具有 CREATE CONNECTION
權限的中繼存放區系統管理員或使用者。
目錄總管
在 Azure Databricks 工作區中,按一下 [目錄]。
在 [目錄] 窗格頂端,按下 [新增] 圖示,然後從功能表中選取 [新增連線]。
或者,從 [快速存取] 頁面,按下 [外部資料 >] 按鈕,移至 [連線] 索引標籤,然後按下 [建立連線]。
輸入使用者易記的 [連線名稱]。
選取 [ 連線類型 ] (資料庫提供者,例如 MySQL 或 PostgreSQL)。
輸入連線屬性(例如主機資訊、路徑和存取認證)。
每個連接類型都需要不同的連線資訊。 請參閱連線類型的文章,列在左側目錄。
(選擇性)按兩下 [ 測試連線 ] 以確認其運作正常。
(選擇性) 新增註解。
按一下 [建立]。
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 同盟的連線。
建立外部目錄
外部目錄會鏡像外部資料系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity Catalog 來查詢和管理該資料庫中資料的存取權。 若要建立外部目錄,可以使用已定義的資料來源的連線。
若要建立外部目錄,您可以在 Azure Databricks 筆記本或 SQL 查詢編輯器中使用目錄總管或 CREATE FOREIGN CATALOG
SQL 命令。
注意
您也可以使用 Unity 目錄 API。 請參閱 Azure Databricks 參考檔。
外部目錄元數據會在每次與目錄互動時同步處理到 Unity 目錄。 如需 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 對 Databricks :您要鏡像的外部 Databricks 工作區中的目錄名稱。 請參閱 建立外部目錄。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
如需管理及使用外部目錄的相關信息,請參閱 管理及使用外部目錄。
Lakehouse 同盟和具體化檢視
當您建立具體化檢視時,Databricks 建議使用 Lakehouse Federation 載入外部數據。 請參閱使用 Databricks SQL 中的具體化檢視。
當您使用 Lakehouse 同盟時,用戶可以參考同盟數據,如下所示:
CREATE MATERIALIZED VIEW xyz AS SELECT * FROM federated_catalog.federated_schema.federated_table;
檢視系統產生的同盟查詢
Lakehouse 同盟會將 Databricks SQL 語句轉譯成可向下推送至同盟數據源的語句。 若要檢視產生的 SQL 語句,請按兩下 [查詢設定檔] 圖形檢視上的外部數據源掃描節點,或執行 EXPLAIN FORMATTED SQL 語句。 如需涵蓋範圍,請參閱每個數據源檔支援的下推一節。
限制
- 查詢是唯讀的。
- 線上的節流是使用 Databricks SQL 並行查詢限制來決定。 每個連線的倉儲之間沒有限制。 請參閱專業和傳統 SQL 倉儲的佇列和自動調整。
- 不支援在 Unity 目錄中具有無效名稱的數據表和架構,而且在建立外部目錄時會由 Unity 目錄忽略。 請參閱限制中的命名規則和限制清單。
- 數據表名稱和架構名稱會轉換成 Unity 目錄中的小寫。 查閱也必須使用小寫名稱。 如果有具有重複小寫名稱的數據表或架構,則只會將其中一個數據表或架構匯入外部目錄。
- 針對所參考的每個外部數據表,Azure Databricks 會排程遠端系統中的子查詢,以從該數據表傳回數據子集,然後透過單一數據流將結果傳回至一個 Azure Databricks 執行程式工作。 如果結果集太大,執行程式可能會用盡記憶體。
- 單一使用者存取模式僅適用於擁有連線的使用者。
- Lakehouse 同盟無法將外部數據表與 Azure Synapse 連線或 Redshift 連線區分大小寫的標識元同盟。
資源配額
Azure Databricks 會在所有 Unity 目錄安全性實體對象上強制執行資源配額。 這些配額列在資源限制中。 外部目錄及其包含的所有物件都會包含在總配額使用量中。
如果你預期超過這些資源限制,請連絡你的 Azure Databricks 帳戶團隊。
你可以使用 Unity 目錄資源配額 API 來監視配額使用。 請參閱 監視 Unity 目錄資源配額的使用方式。