在 Microsoft SQL Server 上執行同盟查詢
本文說明如何設定 Lakehouse 同盟,以在 Azure Databricks 未管理的 SQL Server 數據上執行同盟查詢。 若要深入了解 Lakehouse 同盟,請參閱什麼是 Lakehouse 同盟?。
若要使用 Lakehouse 同盟連線到 SQL Server 資料庫,您必須在 Azure Databricks Unity 目錄中繼存放區中建立下列專案:
- 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
權限。
後續每個基於工作的章節中會指定其他權限需求。
- 如果您打算使用 OAuth 進行驗證,請在 Azure Databricks 的 entra ID Microsoft註冊應用程式。 如需詳細資訊,請參閱下一節。
(選擇性)在 Azure Databricks 的 Microsoft Entra 識別碼中註冊應用程式
如果您想要使用 OAuth 進行驗證,請先遵循此步驟,再建立 SQL Server 連線。 若要改用使用者名稱和密碼進行驗證,請略過本節。
- 登入 Azure 入口網站。
- 在左側導覽中,按兩下 [Microsoft Entra ID]。
- 按兩下 [應用程式註冊]。
- 按一下 [新增註冊]。 輸入新應用程式名稱,並將重新導向 URI 設定為
https://<workspace-url>/login/oauth/azure.html
。 - 按下 [註冊]。
- 在 [ 基本資訊] 方塊中,複製並儲存 應用程式 (用戶端) 識別碼。 您將使用此值來設定應用程式。
- 按兩下 [ 憑證與秘密]。
- 在 [用戶端祕密金鑰] 索引標籤中,按下 [新增用戶端祕密金鑰]。
- 輸入秘密和到期的描述(預設設定為180天)。
- 按一下新增。
- 複製客戶端密碼所產生的值。
- 按兩下 [ API 許可權]。
- 按兩下 [ 新增許可權]。
- 選取 [Azure SQL 資料庫],然後按兩下 [委派許可權] 底下的 [user_impersonation]。
- 按兩下 [ 新增許可權]。
建立連線
連線指定存取外部資料庫系統之路徑和認證。 若要建立連線,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用目錄總管或 CREATE CONNECTION
SQL 命令。
注意
您也可使用 Databricks REST API 或 Databricks CLI 來建立連線。 請參閱 POST /api/2.1/unity-catalog/connections 和 Unity 目錄命令。
需要的權限:具有 CREATE CONNECTION
權限的中繼存放區系統管理員或使用者。
目錄總管
在 Azure Databricks 工作區中,按一下 [目錄]。
在 [目錄] 窗格頂端,按下 [新增] 圖示,然後從功能表中選取 [新增連線]。
或者,從 [快速存取] 頁面,按下 [外部資料 ] 按鈕,移至 [連線] 索引標籤,然後按下 [建立連線]。
輸入使用者易記的 [連線名稱]。
選取 SQL Server 的 [連線類型]。
選取 OAuth 或使用者名稱和密碼的驗證類型。
根據您的驗證方法,輸入 SQL Server 實例的下列連線屬性:
- 主機:您的 SQL 伺服器。
- (基本身份驗證) 港口
- (基本身份驗證) trustServerCertificate:預設為
false
。 當設定為true
時,傳輸層會使用SSL來加密通道,並略過憑證鏈結來驗證信任。 除非您有特定需要略過信任驗證,否則請將此設定保留為預設值。 - (基本身份驗證) 使用者
- (基本身份驗證) 密碼
- (OAuth) 授權端點:您的 Azure Entra 授權端點格式為
https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize
。 - (OAuth) 您建立應用程式的用戶端識別碼 。
- (OAuth) 您建立之客戶端密碼中的客戶端密碼 。
- (OAuth) 用戶端範圍:輸入下列值,但未修改:
https://database.windows.net/.default offline_access
。 - (OAuth)系統會提示您使用 Azure Entra ID 登入。 輸入您的 Azure 使用者名稱和密碼。 重新導向至連線建立頁面之後,授權碼會在UI中填入。
(選擇性)從 應用程式意圖 下拉功能表中選取選項 (預設值:
Read write
]。(選擇性)按兩下 [ 測試連線 ] 以確認其運作正常。
(選擇性) 新增註解。
按一下 [建立]。
注意
(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>')
)
如需設定祕密的相關資訊,請參閱祕密管理。
建立外部目錄
外部目錄會鏡像外部資料系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity Catalog 來查詢和管理該資料庫中資料的存取權。 若要建立外部目錄,可以使用已定義的資料來源的連線。
若要建立外部目錄,可以在 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>');
支援的下推
所有計算都支援下列下推:
- 篩選
- 投影
- 限制
- 函式:部分,僅適用於篩選條件運算式。 (字串函式、數學函式、資料、時間和時間戳函式,以及其他其他函式,例如 Alias、Cast、SortOrder)
Databricks Runtime 13.3 LTS 和更新版本以及 SQL 倉儲計算支援下列下推:
- 彙總
- 下列布爾運算符:=、、<<=、>、>=、<=>
- 下列數學函數(如果 ANSI 已停用,則不支援):+、-、*、% /
- 下列其他運算符: ^, |, ~
- 排序,搭配限制使用時
不支援下列下推:
- 聯結
- 視窗函式
資料類型對應
當您從 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 |
nvarchar、varchar | VarcharType |
text、 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
。