共用方式為


在 Microsoft SQL Server 上執行同盟查詢

此頁面描述如何設定 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 許可權。

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

建立連線

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

Note

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

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

目錄檢視器

  1. 在您的 Azure Databricks 工作區中,按兩下 [資料] 圖示。目錄

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

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

  3. 在 [設定連線精靈] 的 [連線基本概念] 頁面上,輸入使用者易記的 [聯機名稱]。

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

  5. 選取 [ 驗證類型 ] 的 [OAuth]、[ OAuth 機器對機器] 或 [使用者名稱和密碼 (基本驗證)] 。

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

  7. [下一步]。

  8. 在 [ 驗證] 頁面上,輸入 SQL Server 實例的下列連線屬性。 您選取之驗證方法的特定屬性前面會加上括弧中的 Auth type

    • 主機:您的 SQL 伺服器。
    • (基本身份驗證) 港口
    • (基本身份驗證) trustServerCertificate:預設為 false。 當設定為 true時,傳輸層會使用 SSL 來加密通道,並略過憑證鏈結來驗證信任。 除非您有特定需要略過信任驗證,否則請將此設定保留為預設值。
    • (基本身份驗證) 使用者
    • (基本身份驗證) 密碼
    • (OAuth)輸入您在 設定 Microsoft Entra ID 以進行 SQL Server 聯盟中收集的連線詳細資料。
  9. 按兩下 [建立連線]。

  10. (基本身份驗證)在連線詳細資料頁面上,指定下列專案:

    • 信任伺服器證書:預設取消選取此設定。 選取時,傳輸層會使用SSL來加密通道,並略過憑證鏈結來驗證信任。 除非您有特定需要略過信任驗證,否則請將此設定保留為預設值。
    • 應用程式意圖:連線到伺服器時的應用程式工作負載類型。
  11. [下一步]。

  12. 在 [ 目錄基本概念] 頁面上,輸入外部目錄的名稱。 外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。

  13. 按兩下 [建立目錄]。

  14. 在 [ 存取] 頁面上,選取使用者可以存取您所建立目錄的工作區。 您可以選取 [ 所有工作區都有存取權],或按兩下 [ 指派給工作區]、選取工作區,然後按兩下 [ 指派]。

  15. 變更可管理目錄中所有物件的存取 權的擁有者 。 開始在文字框中輸入名稱,然後點擊返回結果中的項目。

  16. 授予目錄的權限。 請點擊授與

    1. 指定可存取目錄中對象的 主體 。 開始在文字框中輸入名稱,然後點擊返回結果中的項目。
    2. 請選取授予每個主體的許可權預設值。 根據預設,所有帳戶用戶都會被授與 BROWSE
      • 從下拉功能表中選取 [數據讀取器 ],以授與 read 目錄中對象的許可權。
      • 從下拉功能表中選取 資料編輯器,以授予 readmodify 目錄中對象的權限。
      • 手動選取要授與的許可權。
    3. 請按一下 授權
  17. [下一步]。

  18. 元數據 頁面上,指定標籤鍵值對。 如需詳細資訊,請參閱 在 Unity Catalog 中套用標籤至安全性實體物件

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

  20. 點選 [儲存]。

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/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>');

支援的下推策略

所有計算都支援下列下推:

  • 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