在 Teradata 上執行同盟查詢

本頁說明如何設定 Lakehouse Federation,以對非 Azure Databricks 管理的 Teradata 資料執行聯邦查詢。 欲了解更多湖屋聯盟資訊,請參閱 「連結外部資料庫與目錄」

若要使用 Lakehouse Federation 連接您的 Teradata 資料庫,您必須在您的 Azure Databricks Unity Catalog 中繼資料儲存中建立以下內容(2023 年 11 月 9 日之後建立的工作區已自動配置 Unity Catalog 中繼資料儲存):

  • Teradata 資料庫的 連線。
  • 一個foreign catalog,能在 Unity Catalog 中鏡像你的 Teradata 資料庫,讓你能使用 Unity Catalog 查詢語法和資料治理工具來管理使用者對資料庫的存取Azure Databricks。

開始之前

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

Databricks 需求

工作區需求:

  • 工作區已啟用以支援 Unity 目錄。 2023 年 11 月 9 日之後建立的工作區將自動啟用 Unity Catalog,包括自動進行 metastore 配置。 除非你的工作區早於自動啟用且還沒啟用 Unity Catalog,否則你不需要手動建立元商店。 請參閱 開始使用 Unity 目錄。

計算需求:

  • 從您的運算資源到目標資料庫系統的網路連線狀況。 請參閱 Lakehouse Federation 的網路建議。
  • Azure Databricks計算必須使用 Databricks Runtime 16.1 或更高版本,以及 Standard 或 專用存取模式。
  • SQL 倉儲必須是專業或無伺服器,且必須使用 2024.50 或更新版本。

需要的權限:

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

後續每個以工作為基礎的區段會指定其他許可權需求。

Teradata 認證

Azure Databricks Lakehouse Federation 中的 Teradata 連線只支援 TD2 認證機制(預設的 Teradata 認證)。 TD2 以 Teradata 資料庫管理的使用者名稱與密碼進行驗證。

其他 Teradata 認證機制,如 LDAP、Kerberos 和 TDNEGO,則不被支援。

Teradata TLS

  • 你可以選擇 require、 prefer、 verify-caverify-fulldisable 的 等 SSL 模式。 此 prefer 模式依賴伺服器啟用加密(埠號可設定)。 如果您使用 TLS,任何選項都已足夠(埠會是 443)(verify-ca 並 verify-full 強化連線的安全性,但需要在伺服器端進行更多設定)。 Databricks 建議接受 SSL。 如果你的伺服器不支援 SSL,請使用disable模式;如果嘗試在不支援的情況下使用require進行 SSL 連線,會增加效能負擔。 如需詳細資訊,請參閱 Teradata 檔中 如何使用 TLS 保護連線。

建立Azure Databricks連線

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

Note

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

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

目錄檢視器

  1. 在你的Azure Databricks工作區,點選 Data icon.Catalog。
  2. 在「目錄」窗格頂端,按一下「新增」或加號圖示「新增」圖示,然後從功能表中選取「建立連線」。
  3. 在 [設置連線 精靈的 [連線基本概念] 頁面上,輸入易於識別的 連線名稱。
  4. 選擇 連線類型 中的 Teradata。
  5. (選擇性)新增批注。
  6. 按 [下一步]。
  7. 在 認證 頁面,輸入以下 Teradata 實例的連線屬性:
    • 主機:例如,teradata-demo.teradata.com
    • 埠:例如,1025
    • 使用者:例如,teradata_user
    • 密碼:例如,password123
    • SSL模式: require, prefer, verify-ca, verify-full, disable
  8. 點選 「建立連線」。
  9. 在 目錄基本概念 頁面上,輸入外國目錄的名稱。 外部目錄會鏡像外部資料系統中的資料庫,讓你能使用 Azure Databricks 和 Unity Catalog 查詢和管理該資料庫的資料存取。
  10. (選擇性)按一下 測試連線 以確認它是否正常運作。
  11. 點選 「建立目錄」。
  12. 在 [Access] 頁面上,選擇使用者可以存取您所建立目錄的工作區。 您可以選擇所有工作區都有存取權,或點擊指派到工作區,選擇工作區,然後點擊指派。
  13. 變更 擁有者,以管理目錄中所有物件的存取權。 在文字框中開始輸入主體,然後在傳回的結果中點選主體。
  14. 在目錄上賦予 許可權。 點擊 授權;
    1. 指定 主體 誰可以存取目錄中的物件。 在文字框中開始輸入主體,然後在傳回的結果中點選主體。
    2. 選取 許可權預設,以授與每個主體。 根據預設,所有帳戶用戶都會被授與 BROWSE。
      • 從下拉功能表中選取 [數據讀取器],以授與目錄中物件 read 許可權。
      • 從下拉功能表中選取 [數據編輯器],以授與目錄中物件的 read 和 modify 許可權。
      • 手動選取要授與的許可權。
    3. 請按一下 授權。
  15. 按 [下一步]。
  16. 在 [元數據 頁面上,指定標記索引鍵/值組。 如需詳細資訊,請參閱 將標籤套用至 Unity Catalog 的可保護物件。
  17. (選擇性)新增批注。
  18. 點選 [儲存]。

SQL

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

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

Databricks 建議你用 Azure Databricks secrets 來處理像憑證這類敏感值,而不是用明文字串。 例如:

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

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

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

建立外國目錄

Note

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

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

要建立外國目錄,您可以使用目錄探索器或Azure Databricks筆記本中的 CREATE FOREIGN CATALOG SQL 指令,或 SQL 查詢編輯器。 您也可以使用 Databricks REST API 或 Databricks CLI 來建立目錄。 請參閱 POST /api/2.1/unity-catalog/catalogs 和 的 Unity Catalog 指令。

需要 許可權:CREATE CATALOG 中繼存放區的許可權,以及連線的擁有權或連線 CREATE FOREIGN CATALOG 許可權。

目錄檢視器

  1. 在Azure Databricks工作區中,點擊 Data 圖示。Catalog 以開啟目錄總管。

  2. 在 [目錄] 窗格頂端,按兩下 [新增] 或 [加號] 圖示[新增] 圖示,然後從功能表中選取 [新增目錄 ]。

    或者,從 [快速存取] 頁面,按一下 [目錄] 按鈕,然後按一下 [建立目錄] 按鈕。

  3. 請遵循在 建立目錄中建立外國目錄的指示。

SQL

在筆記本或 SQL 查詢編輯器中執行下列 SQL 命令。 方括號內的項目為可選。 替換佔位符的值。

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

ANSI 合規性

Teradata 連接器在 Databricks Runtime 17.1 開始的所有會話中預設使用 TMODE=ANSI。 此設定使字串比較與數值運算行為與 Azure Databricks 預設使用的 ANSI SQL 方言保持一致。 在 ANSI 模式下,字串比較是區分大小寫的,而在 Teradata 的舊有 TERA 模式下,字串比較則是不區分大小寫(例如, 'ABC' = 'abc' 評估為真)。 當你從支援 ANSI 的 Azure Databricks 運算查詢 Teradata 時,這種舊有行為可能會產生意想不到的結果。

這很重要

如果你切換到 Databricks Runtime 17.1 或更新版本、Databricks SQL 或 Serverless 計算,預設會話模式會從 TERA 變更為 ANSI。 這可能會影響查詢結果,尤其是對於依賴不區分大小寫字串匹配的 Teradata 視圖。 例如,若底層資料包含 WHERE status = 'Active' 或 'ACTIVE',使用'active'模式的檢視可能會回傳不同結果,因為 ANSI 模式將這些資料視為不同值。

支援的下推策略

下表列出 Teradata 支援的下推操作,以及每個操作所需的運算量。

下壓 支持的計算
Aggregates 支援 所有運算
算術運算子
(例如 +、-、*、%、/)— 若禁用 ANSI 模式 則不支援
支援 所有運算
位元運算子
(&, |, ^)
支援 所有運算
布林運算子
(例如 =、<=>、<、<=、>、>=)
支援 所有運算
包含、開始於、結束於、類似 支援 所有運算
Filters 支援 所有運算
Limit 支援 所有運算
數學函式
(FLOOR、CEIL、ROUND、ABS、MOD、POWER、SQRT、LN、EXP、LEAST、GREATEST、COS、COSH、ACOS、SIN、SINH、ASIN、TAN、TANH、ATAN — 部分支援,僅限篩選運算式;ABS 和 MOD 需要 ANSI 模式)
支援 所有運算
雜項功能
(鑄造 — 部分支撐,僅過濾表達式)
支援 所有運算
Projections 支援 所有運算
排序,當與限制數量搭配使用時 支援 所有運算
字串函數
(UPPER、LOWER、CONCAT、SUBSTRING — 部分支援,僅限篩選運算式)
支援 所有運算
字串函數
(TRIM、LTRIM、RTRIM — 部分支持,僅濾波器表達式)
支援 Databricks Runtime 17.3 及以上版本與 SQL 倉庫運算
字串函數
(RPAD — 部分支援,僅過濾表達式)
支援 Databricks 執行環境 18.1 及以上版本與 SQL 倉庫運算
Joins 支援 Databricks 執行環境 17.2 及以上版本,以及 SQL 倉庫運算。 此下推功能目前為 公開預覽;請在 預覽 頁面上啟用 聯合式查詢的聯結下推 切換。
視窗函數 不支援 不支援

數據類型對應

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

Teradata 類型 Spark 類型
Byte、Blob BinaryType
Byteint、Smallint、Integer IntegerType
BigInt LongType
Float、Double、Double Precision DoubleType
Number(n, m) DecimalType
Number(*, m)、Number(*)、Number Unsupported
Varchar(N) StringType
Time、Timestamp TimestampType

其他資源