共用方式為


在 MySQL 上執行同盟查詢

本文說明如何設定 Lakehouse 同盟,對 Azure Databricks 未管理的 MySQL 數據執行同盟查詢。 若要深入了解 Lakehouse 同盟,請參閱什麼是 Lakehouse 同盟?

若要使用 Lakehouse Federation 連線到 MySQL 資料庫,您必須在 Azure Databricks Unity Catalog 中繼存放區元目錄中建立下列項目:

  • 與 MySQL 資料庫的連線
  • 外部目錄,鏡像 Unity 目錄中的 MySQL 資料庫,讓您可以使用 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/connectionsUnity Catalog 命令

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

目錄瀏覽器

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

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

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

  3. 設定連線 精靈的 基本連線概念 頁面上,輸入易用的 連線名稱

  4. 選取 MySQL 連線類型

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

  6. 點選 下一步

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

    • 主機:例如 mysql-demo.lb123.us-west-2.rds.amazonaws.com
    • :例如 3306
    • 使用者:例如 mysql_user
    • 密碼:例如 password123
  8. (選擇性):選取 [信任伺服器證書。 預設不會選取。 選取時,傳輸層會使用SSL來加密通道,並略過憑證鏈結來驗證信任。 除非您有特定需要略過信任驗證,否則請將此設定保留為預設值。

  9. 點選 建立連線

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

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

  12. 點選 「建立目錄」

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

  14. 變更 擁有者,以便讓其能夠管理目錄中所有物件的存取權。 開始在文字框中輸入主體,然後在搜尋結果中按一下主體。

  15. 在目錄上授予 許可權。 按一下 [授權 ]:

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

  17. 在 [元數據] 頁面上,指定標籤鍵值對。 如需詳細資訊,請參閱 將標籤套用至 Unity Catalog 可保護的物件

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

  19. 點選 [儲存]。

SQL

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

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

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

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

如果您必須在筆記本 SQL 命令中使用純文字字串,請避免藉由逸出與 之類的$\特殊字元來截斷字串。 例如: \$

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

建立外國目錄

注意

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

外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。 若要建立外部目錄,您可以使用已定義的數據源連線。

若要建立外部目錄,您可以在 Azure Databricks 筆記本或 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

在筆記本或 Databricks SQL 編輯器中執行下列 SQL 命令。 括弧中的項目是選擇性的。 替換佔位符的值:

  • <catalog-name>:Azure Databricks 中目錄的名稱。
  • <connection-name>:指定數據源、路徑和存取認證的 連接物件
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>;

支援的下推

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

  • 篩選
  • 投影
  • 限制
  • 函式:部分,僅適用於篩選條件運算式。 (字串函式、數學函式、日期、時間和時間戳函式,以及其他其他函式,例如 Alias、Cast、SortOrder)

Databricks Runtime 13.3 LTS 和更新版本以及 SQL 倉儲支援下列下推:

  • 彙總
  • 布林運算子
  • 下列數學函數(如果 ANSI 已停用,則不支援):+、-、*、% /
  • 排序在配合限制條件使用時

不支援下列下推:

  • 聯結
  • 視窗函式

資料類型對應

當您從 MySQL 讀取至 Spark 時,資料類型會對應如下:

MySQL 類型 Spark 類型
bigint (如果未帶正負號),十進位 DecimalType
tinyint*, int, integer, mediumint, smallint IntegerType
bigint (如果簽署) LongType
float FloatType
double DoubleType
char、 enum、 set CharType
varchar VarcharType
json, longtext, mediumtext, text, tinytext StringType
binary、blob、varbinary、varchar binary BinaryType
bit、boolean BooleanType
date、 year DateType
datetime、time、timestamp** TimestampType/TimestampNTZType

* tinyint(1) signedtinyint(1) unsigned 會被視為布林值,並轉換成 BooleanType。 請參閱 MySQL 檔中的連接器/J 參考

** 當您從 MySQL 讀取時,MySQL Timestamp 會對應至 Spark TimestampType if preferTimestampNTZ = false (預設值)。 如果,MySQL Timestamp 會對應至 TimestampNTZTypepreferTimestampNTZ = true