在 Oracle 上執行同盟查詢
重要
這項功能 公開預覽版。
本文說明如何設定 Lakehouse 同盟,對 Azure Databricks 未管理的 Oracle 數據執行同盟查詢。 若要深入瞭解 Lakehouse 同盟,請參閱 什麼是 Lakehouse 同盟?。
若要使用 Lakehouse 同盟連線到 Oracle 資料庫,您必須在 Azure Databricks Unity 目錄中繼存放區中建立下列專案:
- 連線 至 Oracle 資料庫。
- 外部目錄,鏡像 Unity 目錄中的 Oracle 資料庫,讓您可以使用 Unity 目錄查詢語法和數據控管工具來管理 Azure Databricks 使用者對資料庫的存取權。
開始之前
開始之前,請確定您符合本節中的需求。
Databricks 需求
工作區需求:
- 已啟用 Unity 目錄的工作區。
計算需求:
- 計算資源與目標資料庫系統之間的網路連線。 請參閱 Lakehouse Federation的
網路建議。 - Azure Databricks 計算必須使用 Databricks Runtime 16.1 或更新版本,並採用 共用 或 單一使用者 存取模式。
- SQL 倉儲必須是專業或無伺服器,且必須使用 2024.50 或更新版本。
需要的權限:
- 若要建立連線,您必須是中繼存放區系統管理員,或是具有附加至工作區之 Unity 目錄中繼存放區
CREATE CONNECTION
許可權的使用者。 - 若要建立外部目錄,您必須具有中繼存放區的
CREATE CATALOG
權限,而且必須是連線的擁有者或具有連線的CREATE FOREIGN CATALOG
特權。
接下來每個任務為基礎的區段中會詳細說明額外的權限需求。
Oracle 需求
- 已啟用伺服器端原生網路加密(至少
ACCEPTED
層級)。 請參閱 Oracle 檔中 設定網路數據加密。
建立 Azure Databricks 連線
連接會指定用來存取外部資料庫系統的路徑和認證。 若要建立連線,您可以在 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 工作區中,按一下 [
目錄。
- 在左窗格中,展開 [外部數據] 功能表,然後選取 [連線]。
- 按下 「建立連線」。
- 在 [連線基本概念 頁面] 上,於 [設定連線 精靈] 中輸入使用者易記的 [連線名稱]。
- 選取 連線類型 的 Oracle。
- (選擇性)新增批注。
- 請按 [下一步]。
- 在 [驗證] 頁面上,針對 Oracle 實例輸入下列資訊:
-
主機:例如,
oracle-demo.123456.rds.amazonaws.com
-
埠:例如,
1521
-
使用者:例如,
oracle_user
-
密碼:例如,
password123
-
主機:例如,
- 按下 「建立連線」。
- 在 目錄基礎 頁面上,輸入外文目錄的名稱。 外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。
- (選擇性)按一下 [測試連線] 確認是否正常運作。
- 點選 「建立目錄」。
- 在 [Access] 頁面上,選取使用者可以存取您所建立目錄的工作區。 您可以選取 所有工作區都有存取權,或點擊 指派給工作區,選取工作區,然後點擊 指派。
- 更改 擁有者,使其能夠管理目錄中所有物件的存取權。 在文字框中輸入主體,然後點擊傳回結果中的主體。
- 在目錄上授予 的 許可權。 按一下 [授與 ]:
- 指定 主體 誰可以存取目錄中的物件。 在文字框中輸入主體,然後點擊傳回結果中的主體。
- 選取 權限預設,以授與每個主體。 根據預設,所有帳戶用戶都會被授與
BROWSE
。- 從下拉功能表中選取 [數據讀取器],以授與目錄中物件
read
許可權。 - 從下拉功能表中選取 [數據編輯器],以授與目錄中物件的
read
和modify
許可權。 - 手動選取要授與的許可權。
- 從下拉功能表中選取 [數據讀取器],以授與目錄中物件
- 按兩下 [授與]。
- 請按 [下一步]。
- 在 [元數據] 頁面上,指定標籤鍵-值對。 如需詳細資訊,請參閱 將標籤加到 Unity Catalog 的安全性實體物件。
- (選擇性)新增批注。
- 點選 儲存。
SQL
在筆記本或 Databricks SQL 查詢編輯器中執行下列命令:
CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
Databricks 建議您使用 Azure Databricks 秘密,而不是使用純文本字串來取得敏感性值,例如認證。 例如:
CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>')
)
如果您必須在 Notebook SQL 命令中使用純文字字串,請避免透過逸出特殊字元,例如搭配 $
\
等特殊字元來截斷字串。 例如:\$
。
如需設定秘密的相關信息,請參閱 秘密管理。
建立外國目錄
注意
如果您使用 UI 來建立資料來源的連線,則會建立外部目錄,而且您可以跳過此步驟。
外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。 若要建立外部目錄,您可以使用已定義的數據源連線。
若要建立外部目錄,您可以在 Azure 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 工作區中,按一下
目錄,以開啟目錄總管。
在 [
目錄 ] 窗格頂端,按兩下[新增] 或 [加號] 圖示 [新增 ] 圖示,然後從功能表中選取 [新增目錄]。 或者,從 [快速存取] 頁面,按一下 [目錄] 按鈕,然後按一下 [建立目錄] 按鈕。
請遵循創建目錄中的指示來製作外部目錄。
SQL
在筆記本或 SQL 查詢編輯器中執行下列 SQL 命令。 括弧中的項目是選擇性專案。 取代佔位元值:
-
<catalog-name>
:Azure Databricks 中目錄的名稱。 -
<connection-name>
:指定數據源、路徑和存取認證的 連接物件。 -
<service-name>
:您想要在 Azure Databricks 中鏡像為目錄的「服務名稱」。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (service_name '<service-name>');
支援的推動技術
支援以下操作:
- 過濾器
- 預測
- 限制
- 集 料
- 抵消
- 投放
- 包含、開頭是、結尾是
數據類型對應
當您從 Oracle 讀取至 Spark 時,資料類型會映射如下:
Oracle 類型 | Spark 類型 |
---|---|
TIMESTAMP WITH TIMEZONE、TIMESTAMP WITH LOCAL TIMEZONE | 時間戳記類型 |
日期、時間戳記 | TimestampType/TimestampNTZType* |
NUMBER、FLOAT | 十進制類型 |
二進位浮點數 | 浮點數類型 |
二進制雙精度浮點數 | DoubleType |
CHAR、NCHAR、VARCHAR2、NVARCHAR2 | 字串類型 |
- 如果
spark.sql.timestampType = TIMESTAMP_LTZ
,DATE 和 TIMESTAMP 會對應至 Spark TimestampType (預設值)。 如果滿足spark.sql.timestampType = TIMESTAMP_NTZ
條件,它們會對應至 TimestampNTZType。