此頁面描述如何設定 Lakehouse 同盟,以在 Azure Databricks 未管理的 SQL Server 數據上執行同盟查詢。 若要深入瞭解 Lakehouse 同盟,請參閱 什麼是 Lakehouse 同盟?
若要使用 Lakehouse Federation 連線到 SQL Server 資料庫,您必須在 Azure Databricks Unity Catalog Metastore 中建立下列專案:
- SQL Server 資料庫的 連接。
- 外部目錄,鏡像 Unity 目錄中的 SQL Server 資料庫,讓您可以使用 Unity 目錄查詢語法和數據控管工具來管理 Azure Databricks 使用者對資料庫的存取權。
Lakehouse Federation 支援 SQL Server、Azure SQL 資料庫 和 Azure SQL 受控執行個體。
開始之前
工作區需求:
- 已為 Unity 目錄啟用的工作區。
計算需求:
- 從計算資源到目標資料庫系統的網路連線能力。 請參閱 Lakehouse 同盟的網路建議。
- Azure Databricks 計算必須使用 Databricks Runtime 13.3 LTS 或更新版本和 標準 或 專用 存取模式。
- SQL 倉儲必須是專業或無伺服器,且必須使用 2023.40 或更新版本。
需要的權限:
- 若要建立連線,您必須是中繼存放區系統管理員,或是具有附加至工作區之 Unity 目錄中繼存放區
CREATE CONNECTION許可權的使用者。 - 若要建立外國目錄,您必須具有中繼存放區的
CREATE CATALOG許可權,並且必須是連線的擁有者或具有該連線的CREATE FOREIGN CATALOG許可權。
後續每個基於工作的章節中會指定其他權限需求。
- 如果您打算使用 Microsoft Entra ID 向 SQL Server 進行驗證,請完成設定 SQL Server 同盟的 Microsoft Entra ID 中的設定。
建立連線
連接會指定用來存取外部資料庫系統的路徑和認證。 若要建立連線,您可以在 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 工作區中,按兩下
目錄。
在 [
目錄 ] 窗格頂端,單擊[新增] 或 [加號] 圖示 [新增 ] 圖標,然後從功能表選取 [新增連線]。 或者,從 [ 快速存取 ] 頁面,按兩下 [ 外部數據] 按鈕,移至 [ 連線 ] 索引標籤,然後按兩下 [ 建立連線]。
在 [設定連線精靈] 的 [連線基本概念] 頁面上,輸入使用者易記的 [聯機名稱]。
選取 SQL Server 的 [連線類型]。
選取 [ 驗證類型 ] 的 [OAuth]、[ OAuth 機器對機器] 或 [使用者名稱和密碼 (基本驗證)] 。
(選擇性) 新增註解。
按 [下一步]。
在 [ 驗證] 頁面上,輸入 SQL Server 實例的下列連線屬性。 您選取之驗證方法的特定屬性前面會加上括弧中的
Auth type。- 主機:您的 SQL 伺服器。
- (基本身份驗證) 港口
- (基本身份驗證) trustServerCertificate:預設為
false。 當設定為true時,傳輸層會使用 SSL 來加密通道,並略過憑證鏈結來驗證信任。 除非您有特定需要略過信任驗證,否則請將此設定保留為預設值。 - (基本身份驗證) 使用者
- (基本身份驗證) 密碼
- (OAuth)輸入您在 設定 Microsoft Entra ID 以進行 SQL Server 聯盟中收集的連線詳細資料。
按兩下 [建立連線]。
(基本身份驗證)在連線詳細資料頁面上,指定下列專案:
- 信任伺服器證書:預設取消選取此設定。 選取時,傳輸層會使用SSL來加密通道,並略過憑證鏈結來驗證信任。 除非您有特定需要略過信任驗證,否則請將此設定保留為預設值。
- 應用程式意圖:連線到伺服器時的應用程式工作負載類型。
按 [下一步]。
在 [ 目錄基本概念] 頁面上,輸入外部目錄的名稱。 外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。
按兩下 [建立目錄]。
在 [ 存取] 頁面上,選取使用者可以存取您所建立目錄的工作區。 您可以選取 [ 所有工作區都有存取權],或按兩下 [ 指派給工作區]、選取工作區,然後按兩下 [ 指派]。
變更可管理目錄中所有物件的存取 權的擁有者 。 開始在文字框中輸入名稱,然後點擊返回結果中的項目。
授予目錄的權限。 請點擊授與:
- 指定可存取目錄中對象的 主體 。 開始在文字框中輸入名稱,然後點擊返回結果中的項目。
- 請選取授予每個主體的許可權預設值。 根據預設,所有帳戶用戶都會被授與
BROWSE。- 從下拉功能表中選取 [數據讀取器 ],以授與
read目錄中對象的許可權。 - 從下拉功能表中選取 資料編輯器,以授予
read和modify目錄中對象的權限。 - 手動選取要授與的許可權。
- 從下拉功能表中選取 [數據讀取器 ],以授與
- 請按一下 授權。
按 [下一步]。
在 元數據 頁面上,指定標籤鍵值對。 如需詳細資訊,請參閱 在 Unity Catalog 中套用標籤至安全性實體物件。
(選擇性) 新增註解。
點選 [儲存]。
Note
(OAuth)Azure Entra ID OAuth 端點必須可從 Azure Databricks 控制平面 IP 存取。 請參閱 Azure Databricks 區域。
SQL
在筆記本或 Databricks SQL 查詢編輯器中執行下列命令。
CREATE CONNECTION <connection-name> TYPE sqlserver
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
建議您針對認證等敏感性值使用 Azure Databricks 秘密 ,而不是純文本字串。 例如:
CREATE CONNECTION <connection-name> TYPE sqlserver
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>')
)
如需設定秘密的相關信息,請參閱 秘密管理。
建立外國目錄
Note
如果您使用使用者介面來建立資料來源的連線,則會包含外來目錄的建立,您可以略過此步驟。
外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。 若要建立外部目錄,您可以使用已定義的數據源連線。
若要建立外部目錄,您可以在 Azure Databricks 筆記本或 SQL 查詢編輯器中使用目錄總管或 CREATE FOREIGN CATALOG SQL 命令。 您也可以使用 Databricks REST API 或 Databricks CLI 來建立目錄。 請參閱 POST /api/2.1/unity-catalog/catalogs 和 Unity Catalog 命令。
需要的許可權:CREATE CATALOG 中繼存放區的許可權,以及連線的擁有權或 CREATE FOREIGN CATALOG 許可權。
目錄檢視器
在您的 Azure Databricks 工作區中,按一下
以開啟目錄總管。
在 [
目錄 ] 窗格頂端,單擊[新增] 或 [加號] 圖示 [新增 ] 圖示,然後從功能表中選取 [新增目錄]。 或者,從 [ 快速存取] 頁面按兩下 [ 目錄] 按鈕,然後按下 [ 建立目錄 ] 按鈕。
請按照建立目錄中的指示來建立外部目錄。
SQL
在筆記本或 SQL 查詢編輯器中,執行下列 SQL 命令。 括弧中的項目是選擇性的。 替換占位符號:
-
<catalog-name>:Azure Databricks 中目錄的名稱。 -
<connection-name>:指定數據源、路徑和存取認證的 連接物件 。 -
<database-name>:您想要在 Azure Databricks 中作為目錄鏡像的資料庫名稱。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
支援的下推策略
所有計算都支援下列下推:
- Filters
- Projections
- Limit
- 函式:部分,僅適用於篩選條件運算式。 (字串函式、數學函式、資料、時間和時間戳函式,以及其他其他函式,例如 Alias、Cast、SortOrder)
Databricks Runtime 13.3 LTS 和更新版本以及 SQL 倉儲計算支援下列下推:
- Aggregates
- 下列布爾運算符:=、、<<=、>、>=、<=>
- 下列數學函數(如果 ANSI 已停用,則不支援):+、-、*、% /
- 下列其他運算符: ^, |, ~
- 排序,當與限制數量搭配使用時
不支援下列下推:
- Joins
- 視窗函式
資料類型對應
當您從 SQL Server 讀取至 Spark 時,資料類型會對應如下:
| SQL Server 類型 | Spark 類型 |
|---|---|
| bigint (unsigned), decimal, money, numeric, smallmoney | DecimalType |
| smallint,tinyint | ShortType |
| int | IntegerType |
| bigint (如果簽署) | LongType |
| real | FloatType |
| float | DoubleType |
| char、nchar、uniqueidentifier | CharType |
| 恩瓦查爾,瓦爾查爾 | VarcharType |
| 文字, XML | StringType |
| binary, geography, geometry, image, timestamp, udt, varbinary | BinaryType |
| bit | BooleanType |
| date | DateType |
| datetime、datetime、smalldatetime、time | TimestampType/TimestampNTZType |
*當您從 SQL Server 讀取時,SQL Server datetimes 會在 [預設值] 對應TimestampType至 SparkpreferTimestampNTZ = false。 如果 datetimes,SQL Server TimestampNTZType 會對應至 preferTimestampNTZ = true 。