在 Teradata 上运行联合查询

本页介绍如何设置 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 或更高版本和 StandardDedicated 访问模式。
  • 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-caverify-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/connectionsUnity 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、、preferverify-caverify-fulldisable
  8. 单击“ 创建连接”。

  9. “目录基本信息 ”页上,输入外国目录的名称。 外部目录镜像外部数据系统中的数据库,以便可以使用 Azure Databricks 和 Unity 目录查询和管理对该数据库中数据的访问。

  10. (可选)单击“测试连接”以确认它是否正常工作。

  11. 单击“创建目录”。

  12. “访问 ”页上,选择用户可以在其中访问所创建的目录的工作区。 您可以选择所有工作区均具有访问权限,或单击分配到工作区,选择工作区,然后单击分配

  13. 更改能够管理对目录中所有对象的访问的 所有者 。 开始在文本框中键入主体,然后单击返回的结果中的主体。

  14. 授予对目录的“特权”。 单击“授权”

    1. 指定将有权访问目录中对象的 主体 。 开始在文本框中键入主体,然后单击返回的结果中的主体。

    2. 选择“特权预设”以对每个主体授权。 默认情况下,向所有帐户用户授予 BROWSE

      • 从下拉菜单中选择 “数据读取者 ”,以授予 read 对目录中对象的权限。
      • 从下拉菜单中选择 “数据编辑器”,以向 readmodify 授予目录中对象的权限。
      • 手动选择要授予的权限。
    3. 单击授权

  15. 单击 “下一步”

  16. 在“元数据”页上,指定标记键值对。 有关详细信息,请参阅 将标记应用于 Unity 目录安全对象

  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
)

如果必须在笔记本 SQL 命令中使用纯文本字符串,请通过使用 $ 转义特殊字符(例如 \)来避免字符串被截断。 例如: \$

有关设置机密的详细信息,请参阅机密管理

创建外部目录

注释

如果使用 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工作区中,单击Data icon.Catalog打开目录资源管理器。

  2. 在“目录”窗格顶部,单击 “添加”或加号图标图标,然后从菜单中选择“添加目录”

    也可在“快速访问”页中单击“目录”按钮,然后单击“创建目录”按钮。

  3. 按照说明在 “创建目录”中创建外部目录。

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 支持 所有计算
过滤 器 支持 所有计算
限度 支持 所有计算
预测 支持 所有计算
联接 支持 Databricks Runtime 17.2 及更高版本,以及 SQL 仓库 2025.30 及更高版本

数据类型映射

从 Teradata 读取到 Spark 时,数据类型的映射如下:

Teradata 类型 Spark 类型
字节、Blob 二进制类型
Byteint、Smallint、Integer 整数类型
BigInt LongType
浮点数、双精度浮点数、双精度 DoubleType
Number(n, m) 十进制类型
Number(*,m)、Number(*)、Number 不支持
Varchar(N) 字符串类型
时间、时间戳 时间戳类型

其他资源