共用方式為


在 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 目錄啟用工作區。

計算需求:

  • 從 Databricks Runtime 叢集或 SQL 倉儲到目標資料庫系統的網路連線。 請參閱 Lakehouse 同盟的網路建議
  • Azure Databricks 叢集必須使用 Databricks Runtime 13.3 LTS 或更新版本,以及共用或單一使用者存取模式。
  • SQL 倉儲必須是 Pro 或無伺服器,且必須使用 2023.40 或更新版本。

所需的權限:

  • 若要建立連線,您必須是中繼存放區管理員,或具有附加至工作區之 Unity 目錄中繼存放區上 CREATE CONNECTION 權限的使用者。
  • 若要建立外部目錄,您必須擁有中繼存放區的 CREATE CATALOG 權限,而且必須是連線的擁有者,或擁有連線的 CREATE FOREIGN CATALOG 權限。

後續每個基於工作的章節中會指定其他權限需求。

  • 如果您打算使用 OAuth 進行驗證,請在 Azure Databricks 的 entra ID Microsoft註冊應用程式。 如需詳細資訊,請參閱下一節。

(選擇性)在 Azure Databricks 的 Microsoft Entra 識別碼中註冊應用程式

如果您想要使用 OAuth 進行驗證,請先遵循此步驟,再建立 SQL Server 連線。 若要改用使用者名稱和密碼進行驗證,請略過本節。

  1. 登入 Azure 入口網站。
  2. 在左側導覽中,按兩下 [Microsoft Entra ID]。
  3. 按兩下 [應用程式註冊]。
  4. 按一下 [新增註冊]。 輸入新應用程式名稱,並將重新導向 URI 設定為 https://<workspace-url>/login/oauth/azure.html
  5. 按下 [註冊]
  6. 在 [ 基本資訊] 方塊中,複製並儲存 應用程式 (用戶端) 識別碼。 您將使用此值來設定應用程式。
  7. 按兩下 [ 憑證與秘密]。
  8. 在 [用戶端祕密金鑰] 索引標籤中,按下 [新增用戶端祕密金鑰]
  9. 輸入秘密和到期的描述(預設設定為180天)。
  10. 按一下新增
  11. 複製客戶端密碼所產生的值。
  12. 按兩下 [ API 許可權]。
  13. 按兩下 [ 新增許可權]。
  14. 選取 [Azure SQL 資料庫],然後按兩下 [委派許可權] 底下的 [user_impersonation]。
  15. 按兩下 [ 新增許可權]。

建立連線

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

注意

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

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

目錄總管

  1. 在 Azure Databricks 工作區中,按一下 目錄圖示 [目錄]。

  2. 在 [目錄] 窗格頂端,按下 新增或加號圖示 [新增] 圖示,然後從功能表中選取 [新增連線]

    或者,從 [快速存取] 頁面,按下 [外部資料 ] 按鈕,移至 [連線] 索引標籤,然後按下 [建立連線]

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

  4. 選取 SQL Server 的 [連線類型]。

  5. 選取 OAuth使用者名稱和密碼驗證類型

  6. 根據您的驗證方法,輸入 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中填入。
  7. (選擇性)按兩下 [ 測試連線 ] 以確認其運作正常。

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

  9. 按一下 [建立]。

注意

(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/catalogsUnity Catalog 命令

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

目錄總管

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

  2. 在 [目錄] 窗格頂端,按下 新增或加號圖示 [新增] 圖示,然後從功能表中選取 [新增目錄]

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

  3. 遵循在建立目錄中建立外部目錄的指示。

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 會在 [預設值] 對應preferTimestampNTZ = false至 SparkTimestampType。 如果 preferTimestampNTZ = true,SQL Server datetimes 會對應至 TimestampNTZType