此頁面說明如何設定 Lakehouse 同盟,以在 Azure Databricks 未管理的 MySQL 數據上執行同盟查詢。 欲了解更多湖屋聯盟資訊,請參閱 「連結外部資料庫與目錄」
若要使用 Lakehouse Federation 連接您的 MySQL 資料庫,您必須在 Azure Databricks Unity 目錄的中繼儲存庫中建立以下內容(2023 年 11 月 9 日之後建立的工作區已自動配置 Unity Catalog 中繼儲存庫):
- 與 MySQL 資料庫的連線。
- 外部目錄,鏡像 Unity 目錄中的 MySQL 資料庫,讓您可以使用 Unity 目錄查詢語法和數據控管工具來管理 Azure Databricks 使用者對資料庫的存取權。
Requirements
工作區需求:
- 已啟用 Unity 目錄的工作區。 2023 年 11 月 9 日之後建立的工作區將自動啟用 Unity Catalog,包括自動進行 metastore 配置。 除非你的工作區早於自動啟用且還沒啟用 Unity Catalog,否則你不需要手動建立元商店。 請參閱 開始使用 Unity 目錄。
計算需求:
- 計算資源與目標資料庫系統間的網路連接。 請參閱 Lakehouse 同盟的網路建議。
- Azure Databricks 計算必須使用 Databricks Runtime 13.3 LTS 或更新版本和 標準 或 專用 存取模式。
- SQL 倉儲必須是專業或無伺服器,且必須使用 2023.40 或更新版本。
所需的權限:
- 若要建立連線,您必須是中繼存放區系統管理員,或是具有附加至工作區之 Unity 目錄中繼存放區
CREATE CONNECTION許可權的使用者。 在自動啟用 Unity 目錄的工作區中,工作區管理員預設擁有此CREATE CONNECTION權限。 - 若要建立外部目錄,您必須擁有中繼存放區的
CREATE CATALOG許可權,並且您必須是連線的擁有者,或者擁有連線的CREATE FOREIGN CATALOG特權。 在自動啟用 Unity 目錄的工作區中,工作區管理員預設擁有此CREATE CATALOG權限。
在後續每個以任務為導向的章節中,將會指定額外的權限需求。
需要 SSL 才能建立連線。
建立連線
連接會指定用來存取外部資料庫系統的路徑和認證。 若要建立連線,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用目錄總管或 CREATE CONNECTION SQL 命令。
注意
您也可使用 Databricks REST API 或 Databricks CLI 來建立連線。 請參閱 POST /api/2.1/unity-catalog/connections 和 Unity Catalog 命令。
需要的權限:具有 CREATE CONNECTION 權限的中繼存放區系統管理員或使用者。
目錄瀏覽器
- 在您的 Azure Databricks 工作區中,按兩下
目錄。
- 在「目錄」窗格頂端,按一下「
「新增」圖示,然後從功能表中選取「建立連線」。 - 在 設定連線 精靈的 基本連線概念 頁面上,輸入易用的 連線名稱。
- 選取 MySQL 連線類型 。
- (選擇性) 新增註解。
- 點選 下一步。
- 在 驗證 頁面,輸入以下 MySQL 實例的連線屬性:
-
主機:例如
mysql-demo.lb123.us-west-2.rds.amazonaws.com -
埠:例如
3306 -
使用者:例如
mysql_user -
密碼:例如
password123
-
主機:例如
- (選擇性):選取 [信任伺服器證書。 預設不會選取。 選取時,傳輸層會使用SSL來加密通道,並略過憑證鏈結來驗證信任。 除非您有特定需要略過信任驗證,否則請將此設定保留為預設值。
- (可選) 使用者提供的伺服器憑證:由 PEM 編碼的 MySQL 實例公開憑證。 連線始終以 SSL 加密,該憑證在 TLS 握手時驗證伺服器身份。 當你的伺服器提供來自私有或內部憑證授權中心且不在預設信任儲存庫的憑證時,提供它。 這是選擇 信任伺服器憑證(Trust server certificate)的替代方案,後者會跳過驗證。 如果你們雙方都提供憑證並選擇 信任伺服器憑證,則所提供的憑證會優先。 主機名稱驗證是作為 TLS 握手程序的一部分進行:若憑證上的主機名稱與請求的主機名稱不符,連線即告失敗。
- 點選 建立連線。
- 在 目錄基本概念 頁面上,輸入外國目錄的名稱。 外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。
- (選擇性)按兩下 [ 測試連線 ] 以確認其運作正常。
- 點選 「建立目錄」。
- 在 [Access] 頁面上,選取使用者可以訪問您建立的目錄的工作區。 您可以選取 所有工作區都有存取權,或按一下 指派給工作區,選取工作區,然後按一下 指派。
- 變更 擁有者,以便讓其能夠管理目錄中所有物件的存取權。 開始在文字框中輸入主體,然後在搜尋結果中按一下主體。
- 在目錄上授予 許可權。 點擊 授權;
- 指定 主體 誰可以存取目錄中的物件。 開始在文字框中輸入主體,然後在搜尋結果中按一下主體。
- 為每個主體選取要授與的 權限預設。 根據預設,所有帳戶用戶都會被授與
BROWSE。- 從下拉功能表中選取 [數據讀取器],以授予目錄中物件
read許可權。 - 從下拉功能表中選取 [數據編輯器],以授與目錄中物件的
read和modify許可權。 - 手動選取要授與的許可權。
- 從下拉功能表中選取 [數據讀取器],以授予目錄中物件
- 按兩下 [授與]。
- 點選 下一步。
- 在 [元數據] 頁面上,指定標籤鍵值對。 如需詳細資訊,請參閱 將標籤套用至 Unity Catalog 可保護的物件。
- (選擇性) 新增註解。
- 點選 [儲存]。
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>')
)
在 TLS 握手期間驗證伺服器身份(例如,當你的 MySQL 伺服器呈現來自私有或內部憑證授權中心且不在預設信任儲存庫中的憑證時),請在選項 userProvidedServerCertificate 中傳遞伺服器的 PEM 編碼憑證。 連線始終以 SSL 加密。 此選項是 trustServerCertificate 替代方案,且優先於此。
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>'),
userProvidedServerCertificate '<pem-encoded-certificate>'
)
如果您必須在筆記本 SQL 命令中使用純文字字串,請避免截斷字串,方法是逃逸像 $、\ 之類的特殊字元。 例如: \$ 。
如需設定祕密的相關資訊,請參閱祕密管理。
建立外國目錄
注意
如果您使用使用者介面來建立資料來源的連接,則會包含外部目錄的創建,您可以略過此步驟。
外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。 若要建立外部目錄,您可以使用已定義的數據源連線。
若要建立外部目錄,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用目錄總管或 CREATE FOREIGN CATALOG SQL 命令。 您也可以使用 Databricks REST API 或 Databricks CLI 來建立目錄。 請參閱 POST /api/2.1/unity-catalog/catalogs 和 Unity Catalog 命令。
必要權限:中繼存放區的CREATE CATALOG權限,還有連線的所有權或對連線的CREATE FOREIGN CATALOG特權。
目錄瀏覽器
在您的 Azure Databricks 工作區中,按一下
以開啟目錄總管。
在 [
目錄 ] 窗格頂端,按兩下[新增] 或 [加號] 圖示 [新增 ] 圖示,然後從功能表中選取 [新增目錄]。 或者,從 [快速存取] 頁面,按 [目錄] 按鈕,然後按 [建立目錄] 按鈕。
請遵循在 建立目錄中建立外國目錄的指示。
您也可以指定以下目錄選項:
-
TINYINT(1) is bit: 一個可選的目錄選項,指定 MySQLtinyint(1)欄位如何映射到 Spark 資料型態。 更多資訊請參見 資料型別映射 。
-
SQL
在筆記本或 Databricks SQL 編輯器中執行下列 SQL 命令。 方括號內的項目為可選。 替換佔位符的值:
-
<catalog-name>:Azure Databricks 中目錄的名稱。 -
<connection-name>:指定數據源、路徑和存取認證的 連接物件。 -
tinyInt1isBit: 一個可選的目錄選項,指定 MySQLtinyint(1)欄位如何映射到 Spark 資料型態。 更多資訊請參見 資料型別映射 。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
[OPTIONS (tinyInt1isBit {'true'|'false'})];
支援的推送執行
下表列出 MySQL 支援的推送操作,以及每個操作所需的運算量。
| 下壓 | 支持的計算 |
|---|---|
| 日期、時間與時間戳記功能 (僅部分、濾波表達式) |
|
| 篩選 |
|
| 限制 |
|
| 數學函式 (僅部分、濾波表達式) |
|
| 雜項功能 (例如別名、類型轉換、排序順序;僅限於部分篩選運算式) |
|
| Offset |
|
| 投影 |
|
| 字串函數 (僅部分、濾波表達式) |
|
| 彙總 |
|
| 算術運算子 (例如 +、-、*、%、/;若停用 ANSI 則不支援) |
|
| 布林運算子 (例如 =、<=>、<、<=、>、>=) |
|
| 位元 AND 運算子 (&) |
|
| 排序在配合限制條件使用時 |
|
| 聯結 |
|
| 視窗函式 |
|
資料類型對應
當您從 MySQL 讀取資料到 Spark 時,資料類型的對應方式如下:
| MySQL 類型 | Spark 類型 |
|---|---|
bigint (若未簽署), decimal |
DecimalType |
int、integer、mediumint、smallint |
IntegerType |
tinyint(1) |
BooleanType/ByteType* |
tinyint(>1) |
ByteType |
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 |
* MySQL tinyint(1) signed/unsigned 對應到 Spark BooleanType 如果目錄選項 tinyInt1isBit = true(預設)。 若為目錄選項 tinyInt1isBit = false ,則映射至 ByteType。
** 當您從 MySQL 讀取時,MySQL Timestamp 會對應至 Spark TimestampType if preferTimestampNTZ = false (預設值)。 如果 Timestamp,MySQL TimestampNTZType 會對應至 preferTimestampNTZ = true。