共用方式為


在 Azure Synapse Microsoft執行同盟查詢

本文說明如何設定 Lakehouse 同盟,以在 Azure Databricks 未管理的 Azure Synapse (SQL 數據倉儲) 數據上執行同盟查詢。 若要深入了解 Lakehouse 同盟,請參閱什麼是 Lakehouse 同盟?

若要透過 Lakehouse Federation 連線到 Azure Synapse(SQL 數據倉儲)資料庫,您必須在 Azure Databricks Unity 資料目錄中建立以下項目:

  • Azure Synapse (SQL 數據倉儲) 資料庫的連線
  • 外部目錄,鏡像 Unity 目錄中的 Azure Synapse (SQL 數據倉儲) 資料庫,讓您可以使用 Unity 目錄查詢語法和數據控管工具來管理 Azure Databricks 使用者對資料庫的存取權。

開始之前

工作區需求:

  • 已啟用 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 Catalog 指令

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

目錄探索

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

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

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

  3. 在 [連線基本概念 頁面] 的 [設定連線 精靈] 中,輸入使用者友好的 [連線名稱]。

  4. 選取 連線類型SQLDW

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

  6. 點選 [下一步]

  7. 在 [驗證] 頁面上,輸入 Azure Synapse 實例的下列連線屬性:

    • 主機:例如 sqldws-demo.database.windows.net
    • :例如 1433
    • 使用者
    • 密碼
    • 信任伺服器證書:預設不會選取此選項。 選取時,傳輸層會使用SSL來加密通道,並略過憑證鏈結來驗證信任。 除非您有特定需要略過信任驗證,否則請將此設定保留為預設值。
  8. 點選 「建立連線」

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

  10. (選擇性)按兩下 [ 測試連線 ] 以確認其運作正常。

  11. 點選 建立目錄

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

  13. 變更 擁有者,使其能夠管理目錄中全部物件的存取權限。 開始在文字框中輸入主體,然後在返回的結果中點擊主體。

  14. 在目錄中,授予 許可權。 按兩下 [授與 ]

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

  16. 在 [元數據 頁面上,指定標籤索引鍵/值組。 如需詳細資訊,請參閱 將標籤套用至 Unity Catalog 可以設置安全性的物件

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

  18. 點選 儲存

SQL

在筆記本或 Databricks SQL 查詢編輯器中執行下列命令。

CREATE CONNECTION <connection-name> TYPE sqldw
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

建議您使用 Azure Databricks 秘密,而不是針對認證等敏感性值使用純文本字串。 例如:

CREATE CONNECTION <connection-name> TYPE sqldw
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

如需設定祕密的相關資訊,請參閱祕密管理

建立外國目錄

注意

如果您使用使用者介面來建立資料來源的連線,這會包含外部目錄的建立,因此您可以略過此步驟。

外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 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>');

支援的下推

支援下列下推:

  • 篩選
  • 投影
  • 限制
  • 匯總(Average、Count、Max、Min、StddevPop、StddevSamp、Sum、VarianceSamp)
  • 函式(算術和其他其他函式,例如 Alias、Cast、SortOrder)
  • 排序

不支援下列下推:

  • 聯結
  • 視窗函式

資料類型對應

當您從 Synapse / SQL 數據倉儲讀取至 Spark 時,數據類型會對應如下:

Synapse 類型 Spark 類型
decimal、money、numeric、smallmoney DecimalType
smallint ShortType
tinyint ByteType
int IntegerType
bigint LongType
real FloatType
float DoubleType
char, nchar, ntext, nvarchar, text, uniqueidentifier, varchar, xml StringType
binary, geography, geometry, image, timestamp, udt, varbinary BinaryType
bit BooleanType
date DateType
datetime、datetime、smalldatetime、time TimestampType/TimestampNTZType*

*當您從 Synapse / SQL 數據倉儲 (SQLDW) 讀取時,SQLDW datetimes 會對應至 Spark TimestampType if preferTimestampNTZ = false (預設值)。 如果,SQLDW datetimes 會對應至 TimestampNTZTypepreferTimestampNTZ = true