本页介绍如何设置 Lakehouse 联合计算,以对不是由 Azure Databricks 平台管理的 Teradata 数据运行联合查询。 若要了解有关 Lakehouse 联合的更多信息,请参阅 什么是 Lakehouse 联合?
若要使用 Lakehouse 联邦连接到 Teradata 数据库,必须在 Azure Databricks Unity Catalog 元存储中创建以下内容(2023 年 11 月 9 日之后创建的工作区已自动预配 Unity Catalog 元存储):
- 与 Teradata 数据库的连接。
- foreign catalog,它在 Unity Catalog 中映射您的 Teradata 数据库,以便可以使用 Unity Catalog 查询语法和数据治理工具来管理 Azure Databricks 用户对该数据库的访问。
在您开始之前
开始之前,请确保符合此部分的要求。
Databricks 要求
工作区要求:
- 已为 Unity Catalog 启用工作区。 2023年11月9日之后创建的工作区会自动启用Unity Catalog,包括自动配置元存储。 若您的工作区在自动启用功能推出之前创建且尚未启用 Unity Catalog,则需要手动创建元存储。 请参阅 Unity Catalog 的自动启用。
计算要求:
- 计算资源与目标数据库系统之间的网络连接。 请参阅 Lakehouse Federation 网络建议。
- Azure Databricks计算必须使用 Databricks Runtime 16.1 或更高版本和 Standard 或 Dedicated 访问模式。
- SQL 仓库必须是 Pro 或无服务器仓库,且必须使用 2024.50 或更高版本。
所需的权限:
- 若要创建连接,你必须是元存储管理员或对附加到工作区的 Unity Catalog 元存储具有
CREATE CONNECTION权限的用户。 在自动为 Unity 目录启用的工作区中,工作区管理员默认具有CREATE CONNECTION权限。 - 若要创建外部目录,你必须对元存储具有
CREATE CATALOG权限,并且是连接的所有者或对连接具有CREATE FOREIGN CATALOG特权。 在自动为 Unity 目录启用的工作区中,工作区管理员默认具有CREATE CATALOG权限。
后面的每个基于任务的部分中都指定了其他权限要求。
Teradata 身份验证
Azure Databricks Lakehouse 联合身份验证中的 Teradata 连接仅支持 TD2 身份验证机制(默认 Teradata 身份验证)。 TD2 使用 Teradata 数据库管理的用户名和密码对用户进行身份验证。
不支持其他 Teradata 身份验证机制,例如 LDAP、Kerberos 和 TDNEGO。
Teradata TLS
- 可以在 SSL 的模式之间进行
requirepreferverify-caverify-fulldisable选择。 模式prefer依赖于服务器启用加密(可以配置端口号)。 如果使用 TLS,则任何选项都足以(端口将为 443)(verify-ca并verify-full强化连接的安全性,但需要在服务器端进行更多设置)。 Databricks 建议接受 SSL。 如果服务器不支持 SSL,请使用disable模式;尝试使用require来启用 SSL 会造成性能开销。 有关详细信息,请参阅 Teradata 文档中 如何使用 TLS 保护连接。
创建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工作区中,单击
Catalog。
在目录窗格顶部,单击
,然后从菜单中选择创建连接。在“设置连接”向导的“连接基本信息”页面上,输入用户友好的连接名称。
选择连接类型为Teradata。
(可选)添加注释。
单击 “下一步” 。
在 身份验证 页上,输入 Teradata 实例的以下连接属性:
-
主机:例如
teradata-demo.teradata.com -
端口:例如
1025 -
用户:例如
teradata_user -
密码:例如
password123 -
Ssl 模式:
require、、preferverify-ca、verify-full、disable
-
主机:例如
单击“ 创建连接”。
在 “目录基本信息 ”页上,输入外国目录的名称。 外部目录镜像外部数据系统中的数据库,以便可以使用 Azure Databricks 和 Unity 目录查询和管理对该数据库中数据的访问。
(可选)单击“测试连接”以确认它是否正常工作。
单击“创建目录”。
在 “访问 ”页上,选择用户可以在其中访问所创建的目录的工作区。 您可以选择所有工作区均具有访问权限,或单击分配到工作区,选择工作区,然后单击分配。
更改能够管理对目录中所有对象的访问的 所有者 。 开始在文本框中键入主体,然后单击返回的结果中的主体。
授予对目录的“特权”。 单击“授权”:
指定将有权访问目录中对象的 主体 。 开始在文本框中键入主体,然后单击返回的结果中的主体。
选择“特权预设”以对每个主体授权。 默认情况下,向所有帐户用户授予
BROWSE。- 从下拉菜单中选择 “数据读取者 ”,以授予
read对目录中对象的权限。 - 从下拉菜单中选择 “数据编辑器”,以向
read和modify授予目录中对象的权限。 - 手动选择要授予的权限。
- 从下拉菜单中选择 “数据读取者 ”,以授予
单击授权。
单击 “下一步” 。
在“元数据”页上,指定标记键值对。 有关详细信息,请参阅 将标记应用于 Unity 目录安全对象。
(可选)添加注释。
单击“ 保存”。
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
)
如果必须在笔记本 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工作区中,单击
Catalog打开目录资源管理器。
在“目录”窗格顶部,单击
图标,然后从菜单中选择“添加目录”。也可在“快速访问”页中单击“目录”按钮,然后单击“创建目录”按钮。
按照说明在 “创建目录”中创建外部目录。
SQL
在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。 括号中的项是可选的。 替换占位符的值:
-
<catalog-name>:Azure Databricks中目录的名称。 -
<connection-name>:指定数据源、路径和访问凭据的连接对象。 -
<database-name>:要作为Azure Databricks中的目录镜像的数据库的名称。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
ANSI 合规性
默认情况下,Teradata 连接器在 Databricks Runtime 17.1 中会使用 TMODE=ANSI 处理所有会话。 此设置将字符串比较和数值操作行为与默认情况下Azure Databricks使用的 ANSI SQL 方言保持一致。 在 ANSI 模式下,字符串比较区分大小写,而在 Teradata 的旧 TERA 模式下,它们不区分大小写(例如, 'ABC' = 'abc' 计算结果为 true)。 从启用了 ANSI 的 Azure Databricks 计算资源查询 Teradata 时,传统行为可能会产生意外的结果。
重要
如果切换到 Databricks Runtime 17.1 或更高版本、Databricks SQL 或无服务器计算,则默认会话模式将TERA更改为 ANSI 。 这可能会影响查询结果,尤其是对于依赖于不区分大小写的字符串匹配的 Teradata 视图。 例如,如果基础数据包含WHERE status = 'Active'或'ACTIVE'因为'active'模式将这些结果视为不同的值,则具有筛选器的ANSI视图可能会返回不同的结果。
支持的下推
下表列出了 Teradata 支持的下推操作以及每个操作所需的计算。
| 下推 | 支持的计算 |
|---|---|
| 聚合 |
|
| 演员阵容 |
|
| Contains、Startswith、Endswith、Like |
|
| 过滤 器 |
|
| 限度 |
|
| 预测 |
|
| 联接 |
|
数据类型映射
从 Teradata 读取到 Spark 时,数据类型的映射如下:
| Teradata 类型 | Spark 类型 |
|---|---|
| 字节、Blob | 二进制类型 |
| Byteint、Smallint、Integer | 整数类型 |
| BigInt | LongType |
| 浮点数、双精度浮点数、双精度 | DoubleType |
| Number(n, m) | 十进制类型 |
| Number(*,m)、Number(*)、Number | 不支持 |
| Varchar(N) | 字符串类型 |
| 时间、时间戳 | 时间戳类型 |