在 MySQL 上執行同盟查詢
本文說明如何 set up Lakehouse 同盟,對 Azure Databricks 未管理的 MySQL 數據執行同盟查詢。 若要深入了解 Lakehouse 同盟,請參閱什麼是 Lakehouse 同盟?。
若要使用 Lakehouse Federation 連線到 MySQL 資料庫,您必須在 Azure Databricks Unity Catalog 中繼存放區中建立下列內容:
- 與 MySQL 資料庫的連線。
- 在 Unity catalog 中鏡像您的 MySQL 資料庫的 Catalog,讓您可以使用 Unity Catalog 查詢語法和資料治理工具,以管理 Azure Databricks 中對資料庫的使用者存取權。
開始之前
工作區需求:
- 針對 Unity Catalog啟用工作區。
計算需求:
- 計算資源與目標資料庫系統間的網路連接。 請參閱 Lakehouse 同盟的網路建議。
- Azure Databricks 計算必須使用 Databricks Runtime 13.3 LTS 或更新版本,共用 或 單一使用者 存取模式。
- SQL 倉儲必須是專業或無伺服器,且必須使用 2023.40 或更新版本。
所需的權限:
- 若要建立連線,您必須是中繼存放區系統管理員或具有附加至工作區之 Unity
CREATE CONNECTION
中繼存放區 Catalog 許可權的使用者。 - 若要建立外部 catalog,您必須擁有中繼存放區的
CREATE CATALOG
權限,而且必須是連線的擁有者,或擁有連線的CREATE FOREIGN CATALOG
權限。
後續每個基於工作的章節中會指定其他權限需求。
建立連線
連線會指定存取外部資料庫系統的路徑和 credentials。 若要建立連線,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用 Catalog Explorer 或 CREATE CONNECTION
SQL 命令。
注意
您也可使用 Databricks REST API 或 Databricks CLI 來建立連線。 請參閱 POST /api/2.1/unity-catalog/connections 和 Unity Catalog 命令。
需要的權限:具有 CREATE CONNECTION
權限的中繼存放區系統管理員或使用者。
Catalog 探索者
在 Azure Databricks 工作區中,按兩下 Catalog。
在 [Catalog] 窗格頂端,按兩下 [新增] 圖示,然後 select從功能表新增連線。
或者,從 [快速存取] 頁面,按兩下 [外部數據 >] 按鈕,移至 [Connections] 索引標籤,然後按兩下 [建立連線。
在 [連線基本概 念] 頁面的 [Set 連線 精靈] 頁面上,輸入使用者易記 連線名稱。
Select MySQL 連線類型。
(選擇性) 新增註解。
點選 下一步。
在 [驗證] 頁面上,輸入 MySQL 實例的下列連線屬性:
-
主機:例如
mysql-demo.lb123.us-west-2.rds.amazonaws.com
-
埠:例如
3306
-
使用者:例如
mysql_user
-
密碼:例如
password123
-
主機:例如
(選擇性):Select信任伺服器證書。 預設不會選取。 選取時,傳輸層會使用SSL來加密通道,並略過憑證鏈結來驗證信任。 除非您有特定的需要略過信任驗證,否則請將此 set 保留為預設值。
點選 建立連線。
在 [Catalog 基本 頁面上,輸入外國 catalog的名稱。 外部 catalog 會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity Catalog查詢和管理該資料庫中數據的存取權。
(選擇性)按兩下 [ 測試連線 ] 以確認其運作正常。
按兩下 [建立 catalog]。
在 [Access] 頁面上,select 使用者可以存取您所建立的 catalog 工作區。 您可以 select所有工作區都有存取權,或點擊 指派至工作區,select 工作區,然後點擊 指派。
變更 擁有者 誰將能夠管理 catalog中所有物件的存取權。 開始在文字框中輸入主體,然後在搜尋結果中按一下主體。
Grant 在 catalog上的許可權。 按一下 Grant:
- 指定 主體 誰可以存取 catalog中的物件。 開始在文字框中輸入主體,然後選擇在系統返回的結果中的主體。
-
Select
權限預設grant 給每個主體。 根據預設,所有帳戶用戶都會被授與
BROWSE
。- 從下拉功能表中選擇 Select數據讀取器,然後將 grant
read
的許可權應用於 catalog中的物件。 - 從下拉功能表中選擇 Select數據編輯器,以便對 catalog中的對象進行 grant
read
和modify
的許可權設置。 - 手動將 select 的許可權給予 grant。
- 從下拉功能表中選擇 Select數據讀取器,然後將 grant
- 按兩下 [Grant]。
點選 [下一步]。
在 [元數據] 頁面上,指定受管理的標籤鍵值組合。
(選擇性) 新增註解。
點選 [儲存]。
SQL
在筆記本或 Databricks SQL 查詢編輯器中執行下列命令。
CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
建議您使用 Azure Databricks 機密,而不是用於敏感性 values 的純文本字串,例如 credentials。 例如:
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 命令中使用純文字字串,請避免藉由逸出與 之類的$
\
特殊字元來截斷字串。 例如: \$
。
如需設定祕密的相關資訊,請參閱祕密管理。
建立外國 catalog
外部 catalog 會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity Catalog查詢和管理該資料庫中數據的存取權。 若要建立一個外部 catalog,您可以使用已定義的數據源連線。
若要建立外部 catalog,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用 Catalog Explorer 或 CREATE FOREIGN CATALOG
SQL 命令。 如果您使用使用者介面來建立資料來源的連線,則會包含外部 catalog 的建立,而且您可以略過此步驟。
注意
您也可以使用 Databricks REST API 或 Databricks CLI 來建立 catalog。 請參閱 POST /api/2.1/unity-catalog/catalogs 和 Unity Catalog 命令。
必要權限:中繼存放區的 CREATE CATALOG
權限,以及連線的所有權或連線的 CREATE FOREIGN CATALOG
權限。
Catalog 探索者
在 Azure Databricks 工作區中,按兩下 [Catalog 以開啟 Catalog Explorer。
在 [Catalog] 窗格頂端,單擊 [新增] 圖示,然後從功能表 select[新增 catalog]。
或者,從 [快速存取] 頁面中,按一下 [Catalogs] 按鈕,然後按一下 [建立 catalog] 按鈕。
SQL
在筆記本或 Databricks SQL 編輯器中執行下列 SQL 命令。 括弧中的項目是選擇性的。 取代佔位符 values:
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>;
支援的下推
所有計算都支援下列下推:
- 篩選
- 投影
- Limit
- 函式:部分,僅適用於篩選條件運算式。 (字串函式、數學函式、日期、時間和時間戳函式,以及其他其他函式,例如 Alias、Cast、SortOrder)
Databricks Runtime 13.3 LTS 和更新版本以及 SQL 倉儲支援下列下推:
- 彙總
- 布林運算子
- 下列數學函數(如果 ANSI 已停用,則不支援):+、-、*、% /
- 排序,與 limit 搭配使用時
不支援下列下推:
- 聯結
- 視窗函式
資料類型對應
當您從 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) signed
與 tinyint(1) unsigned
會被視為布林值,並轉換成 BooleanType
。 請參閱 MySQL 檔中的連接器/J 參考 。
** 當您從 MySQL 讀取時,MySQL Timestamp
會對應至 Spark TimestampType
if preferTimestampNTZ = false
(預設值)。 如果,MySQL Timestamp
會對應至 TimestampNTZType
。preferTimestampNTZ = true