本頁說明如何設定 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 許可權的中繼存放區系統管理員或使用者。
目錄檢視器
- 在你的Azure Databricks工作區,點選
Catalog。
- 在「目錄」窗格頂端,按一下「
「新增」圖示,然後從功能表中選取「建立連線」。 - 在 [設置連線 精靈的 [連線基本概念] 頁面上,輸入易於識別的 連線名稱。
- 選擇 連線類型 中的 Teradata。
- (選擇性)新增批注。
- 按 [下一步]。
- 在 認證 頁面,輸入以下 Teradata 實例的連線屬性:
-
主機:例如,
teradata-demo.teradata.com -
埠:例如,
1025 -
使用者:例如,
teradata_user -
密碼:例如,
password123 -
SSL模式:
require,prefer,verify-ca,verify-full,disable
-
主機:例如,
- 點選 「建立連線」。
- 在 目錄基本概念 頁面上,輸入外國目錄的名稱。 外部目錄會鏡像外部資料系統中的資料庫,讓你能使用 Azure Databricks 和 Unity Catalog 查詢和管理該資料庫的資料存取。
- (選擇性)按一下 測試連線 以確認它是否正常運作。
- 點選 「建立目錄」。
- 在 [Access] 頁面上,選擇使用者可以存取您所建立目錄的工作區。 您可以選擇所有工作區都有存取權,或點擊指派到工作區,選擇工作區,然後點擊指派。
- 變更 擁有者,以管理目錄中所有物件的存取權。 在文字框中開始輸入主體,然後在傳回的結果中點選主體。
- 在目錄上賦予 許可權。 點擊 授權;
- 指定 主體 誰可以存取目錄中的物件。 在文字框中開始輸入主體,然後在傳回的結果中點選主體。
- 選取 許可權預設,以授與每個主體。 根據預設,所有帳戶用戶都會被授與
BROWSE。- 從下拉功能表中選取 [數據讀取器],以授與目錄中物件
read許可權。 - 從下拉功能表中選取 [數據編輯器],以授與目錄中物件的
read和modify許可權。 - 手動選取要授與的許可權。
- 從下拉功能表中選取 [數據讀取器],以授與目錄中物件
- 請按一下 授權。
- 按 [下一步]。
- 在 [元數據 頁面上,指定標記索引鍵/值組。 如需詳細資訊,請參閱 將標籤套用至 Unity Catalog 的可保護物件。
- (選擇性)新增批注。
- 點選 [儲存]。
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 許可權。
目錄檢視器
在Azure Databricks工作區中,點擊
Catalog 以開啟目錄總管。
在 [目錄] 窗格頂端,按兩下
[新增] 圖示,然後從功能表中選取 [新增目錄 ]。或者,從 [快速存取] 頁面,按一下 [目錄] 按鈕,然後按一下 [建立目錄] 按鈕。
請遵循在 建立目錄中建立外國目錄的指示。
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 — 部分支持,僅濾波器表達式) |
|
| 字串函數 (RPAD — 部分支援,僅過濾表達式) |
|
| Joins |
|
| 視窗函數 |
|
數據類型對應
當您將資料從 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 |