

# Teradata Vantage 连接
<a name="aws-glue-programming-etl-connect-teradata-home"></a>

在 AWS Glue 4.0 及更高版本中，您可以使用 AWS Glue for Spark 来读取和写入 Teradata Vantage 中的表。您可以使用 SQL 查询来定义要从 Teradata 中读取的信息。您可以通过 AWS Glue 连接并使用存储在 AWS Secrets Manager 中的用户名和密码凭证连接到 Teradata。

有关 Teradata 的更多信息，请参阅 [Teradata 文档](https://docs.teradata.com/)

## 配置 Teradata 连接
<a name="aws-glue-programming-etl-connect-teradata-configure"></a>

要从 AWS Glue 连接到 Teradata，您需要创建 Teradata 凭证并将其存储在某个 AWS Secrets Manager 密钥中，然后将该密钥关联到某个 AWS Glue Teradata 连接。如果您的 Teradata 实例位于某个 Amazon VPC 中，则还需要提供 AWS Glue Teradata 连接的联网选项。

要从 AWS Glue 连接到 Teradata，您可能需要满足一些先决条件：
+ 如果您通过 Amazon VPC 访问您的 Teradata 环境，您的 Amazon VPC 配置应允许您的 AWS Glue 作业与 Teradata 环境进行通信。我们不建议通过公共互联网访问 Teradata 环境。

  在 Amazon VPC 中，确定或创建将在执行 AWS Glue 作业时使用的 **VPC**、**子网**和**安全组**。此外，您的 Amazon VPC 配置需要允许您的 Teradata 实例与该位置之间的网络流量。您的作业需要与您的 Teradata 客户端端口建立 TCP 连接。有关 Teradata 端口的更多信息，请参阅 [Teradata 文档](https://docs.teradata.com/r/Teradata-VantageTM-on-AWS-DIY-Installation-and-Administration-Guide/April-2020/Before-Deploying-Vantage-on-AWS-DIY/Security-Groups-and-Ports)。

  根据您的网络布局，可能需要更改 Amazon VPC 和其他联网服务以建立安全的 VPC 连接。有关 AWS 连接的更多信息，请参阅 Teradata 文档中的 [AWS Connectivity Options](https://docs.teradata.com/r/Teradata-VantageCloud-Enterprise/Get-Started/Connecting-Your-Environment/AWS-Connectivity-Options)。

**配置 AWS Glue Teradata 连接：**

1. 在您的 Teradata 配置中，确定或创建 AWS Glue 将用于连接的用户 *teradataUser* 和密码 *teradataPassword*。有关更多信息，请参阅 Teradata 文档中的 [Vantage Security Overview](https://docs.teradata.com/r/Configuring-Teradata-VantageTM-After-Installation/January-2021/Security-Overview/Vantage-Security-Overview)。

1. 在 AWS Secrets Manager 中，使用您的 Teradata 凭证创建一个密钥。要在 Secrets Manager 中创建密钥，请按照 AWS Secrets Manager 文档中[创建 AWS Secrets Manager 密钥](https://docs.aws.amazon.com//secretsmanager/latest/userguide/create_secret.html)中的教程进行操作。创建密钥后，保留密钥名称 *secretName*，以供下一步使用。
   + 在选择**键/值对**时，请使用键 `user` 和值 *teradataUsername* 创建一个键值对。
   + 在选择**键/值对**时，请使用键 `password` 和值 *teradataPassword* 创建一个键值对。

1. 在 AWS Glue 控制台中，按照 [添加 AWS Glue 连接](console-connections.md) 中的步骤创建一个连接。创建连接后，保留连接名称 *connectionName*，以供下一步使用。
   + 选择**连接类型**时，请选择 Teradata。
   + 在提供 **JDBC URL** 时，请提供您的实例的 URL。您还可以在 JDBC URL 中将某些连接参数进行硬编码，并以逗号分隔。该 URL 必须符合以下格式：`jdbc:teradata://teradataHostname/ParameterName=ParameterValue,ParameterName=ParameterValue`

     支持的 URL 参数包括：
     + `DATABASE` – 主机上默认要访问的数据库的名称。
     + `DBS_PORT` – 在非标准端口上运行时要使用的数据库端口。
   + 选择**凭证类型**时，请选择 **AWS Secrets Manager**，然后将 **AWS 密钥**设置为 *secretName*。

1. 对于下列情况，您可能需要添加额外的配置：
   + 

     对于通过 Amazon VPC 在 AWS 云端托管的 Teradata 实例
     + 您需要向 AWS Glue 连接提供用于定义 Teradata 安全凭证的 Amazon VPC 连接信息。创建或更新连接时，请在**网络选项**中设置 **VPC**、**子网**和**安全组**。

创建 AWS Glue Teradata 连接后，您需要执行以下操作，然后才能调用您的连接方法：
+ 向与您的 AWS Glue 作业关联的 IAM 角色授予读取 *secretName* 的权限。
+ 在 AWS Glue 作业配置中，提供 *connectionName* 作为**附加网络连接**。

## 从 Teradata 读取
<a name="aws-glue-programming-etl-connect-teradata-read"></a>

**先决条件**
+ 您要读取的 Teradata 表。您需要表名 *tableName*。
+ 为了提供身份验证信息而配置的 AWS Glue Teradata 连接。完成“*配置 Teradata 连接*”部分的步骤以配置您的身份验证信息。您需要 AWS Glue 连接的名称 *connectionName*。

例如：

```
teradata_read_table = glueContext.create_dynamic_frame.from_options(
    connection_type="teradata",
    connection_options={
        "connectionName": "connectionName",
        "dbtable": "tableName"
    }
)
```

您还可以提供 SELECT SQL 查询来筛选返回到 DynamicFrame 的结果。您将需要配置 `query`。

例如：

```
teradata_read_query = glueContext.create_dynamic_frame.from_options(
    connection_type="teradata",
    connection_options={
        "connectionName": "connectionName",
        "query": "query"
    }
)
```

## 写入 Teradata 表
<a name="aws-glue-programming-etl-connect-teradata-write"></a>

**先决条件：**您要写入的 Teradata 表 *tableName*。**必须首先创建表，然后才能调用连接方法。**

例如：

```
teradata_write = glueContext.write_dynamic_frame.from_options(
    connection_type="teradata",
    connection_options={
        "connectionName": "connectionName", 
        "dbtable": "tableName"
    }
)
```

## Teradata 连接选项参考
<a name="aws-glue-programming-etl-connect-teradata-reference"></a>
+ `connectionName` – 必需。用于读/写。为了向您的连接方法提供身份验证和网络信息而配置的 AWS Glue Teradata 连接的名称。
+ `dbtable` – 对于写入为必填项，对于读取也为必填项，但提供了 `query` 时除外。用于读/写。您的连接方法将与之交互的表的名称。
+ `query` – 用于读取。用来定义从 Teradata 读取数据时要检索的内容的 SQL SELECT 查询。