共用方式為


在 Oracle 上執行同盟查詢

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

若要使用 Lakehouse Federation 連線到 Oracle 數據庫,您必須在 Azure Databricks Unity Catalog 統一目錄中繼存放區中建立下列項目:

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

Limitations

  • Lakehouse 同盟僅支援 Oracle Cloud 的傳輸層安全性 (TLS) 連線。 與其他 Oracle 資料庫的聯機會使用原生網路加密 (NNE)。

  • 連線到實例 11.2.0.3.0 及更高版本時,如果沒有時區值為 Etc/UTC,會出現已知問題(錯誤:ORA-01882: timezone region not found)。

    • 解決方案:使用spark.databricks.connector.oracle.timezoneAsRegion組態,此組態直接對應至oracle.jdbc.timezoneAsRegion JDBC 驅動程式屬性。
    • 警告:因應措施可能會導致不正確的日光節約時間 (DST) 行為。 如需協助,請連絡 Oracle 支援。

License

Oracle 驅動程式和其他必要的 Oracle jar 是由無點擊連結 FDHUT 授權所控管。

開始之前

開始之前,請先確認您符合本節中的需求。

Databricks 需求

工作區需求:

  • 已為 Unity Catalog 啟用工作區。

計算需求:

  • 計算資源與目標資料庫系統之間的網路連線。 請參閱 Lakehouse Federation 的網路建議。
  • Azure Databricks 計算需要使用 Databricks Runtime 16.1 或更新版本,以及 StandardDedicated 訪問模式。
  • SQL 倉儲必須是專業或無伺服器,且必須使用 2024.50 或更新版本。

需要的權限:

  • 若要建立連線,您必須是中繼存放區系統管理員,或是具有附加至工作區之 Unity 目錄中繼存放區 CREATE CONNECTION 許可權的使用者。
  • 若要建立外來目錄,您必須具有中繼存放區的 CREATE CATALOG 許可權,並且必須是連線的擁有者或具有該連線的 CREATE FOREIGN CATALOG 特權。

接下來每個任務為基礎的區段中會詳細說明額外的權限需求。

Oracle 需求

對於使用原生網路加密的連線,您必須啟用伺服器端 NNE (ACCEPTED 層級至少)。 請參閱 Oracle 檔中 設定網路數據加密。 這不適用於改用 TLS 的 Oracle 雲端連線。

建立 Azure Databricks 連線

連接會指定用來存取外部資料庫系統的路徑和認證。 若要建立連線,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用目錄總管或 CREATE CONNECTION SQL 命令。

Note

您也可以使用 Databricks REST API 或 Databricks CLI 來建立連線。 請參閱 POST /api/2.1/unity-catalog/connectionsUnity Catalog 命令

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

目錄檢視器

  1. 在 Azure Databricks 工作區中,按兩下 [資料] 圖示。目錄
  2. 在左窗格中,展開 [外部數據] 功能表,然後選取 [連線]
  3. 點選 「建立連線」
  4. 在 [連線基本概念 頁面] 上,於 [設定連線 精靈] 中輸入使用者易記的 [連線名稱]。
  5. 選取 連線類型Oracle
  6. (選擇性)新增批注。
  7. [下一步]。
  8. 在 [驗證] 頁面上,針對 Oracle 實例輸入下列資訊:
    • 主機:例如,oracle-demo.123456.rds.amazonaws.com
    • :例如,1521
    • 使用者:例如,oracle_user
    • 密碼:例如,password123
    • 加密通訊協定Native Network Encryption (預設) 或 Transport Layer Security
  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 oracle
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>',
  encryption_protocol '<protocol>' -- optional
);

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>'),
  encryption_protocol '<protocol>' -- optional
)

如果您必須在 Notebook SQL 命令中使用純文字字串,請透過逸出特殊字元以避免截斷字串,例如使用 $\。 例如:\$

如需設定秘密的相關信息,請參閱 秘密管理

建立外國目錄

Note

如果您使用 UI 來建立資料來源的連線,則會建立外部目錄,而且您可以跳過此步驟。

外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 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>:指定數據源、路徑和存取認證的 連接物件
  • <service-name>:您想要在 Azure Databricks 中作為目錄鏡像的服務名稱。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (service_name '<service-name>');

支援的下推策略

支援以下下推功能:

  • Filters
  • Projections
  • Limit
  • Aggregates
  • Offset
  • Cast
  • 包含、以...為起始、以...為結尾

數據類型對應

當您從 Oracle 讀取至 Spark 時,資料類型會映射如下:

Oracle 類型 Spark 類型
TIMESTAMP WITH TIMEZONE、TIMESTAMP WITH LOCAL TIMEZONE TimestampType
日期,時間戳記 TimestampType/TimestampNTZType*
編號,浮動 十進位類型**
二元浮點數 FloatType
二元雙重 DoubleType
CHAR、NCHAR、VARCHAR2、NVARCHAR2 StringType

* 如果 spark.sql.timestampType = TIMESTAMP_LTZ 為 [預設值],則 DATE 和 TIMESTAMP 會對應至 Spark TimestampType。 如果滿足 spark.sql.timestampType = TIMESTAMP_NTZ條件,它們會對應至 TimestampNTZType。

** NUMBER 但不指定有效位數,將會對應至 DecimalType(38, 10),因為 Spark 中不支援純浮點十進位。