

# Teradata Vantage NOS 连接
<a name="connecting-to-data-teradata-nos"></a>

 Teradata NOS（原生对象存储）连接是 Teradata Vantage 的新连接，其利用 Teradata WRITE\_NOS 查询从现有表中读取，利用 READ\_NOS 查询写入表。这些查询使用 Amazon S3 作为暂存目录，因此 Teradata NOS 连接器比现有的 Teradata 连接器（基于 JDBC）更快，尤其在处理大量数据方面。

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

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

**Topics**
+ [创建 Teradata NOS 连接](#creating-teradata-nos-connection)
+ [从 Teradata 表读取](#reading-from-teradata-nos-tables)
+ [写入 Teradata 表](#writing-to-teradata-nos-tables)
+ [Teradata 连接选项参考](#teradata-nos-connection-option-reference)
+ [在 AWS Glue Visual ETL UI 中提供选项](#teradata-nos-connection-option-visual-etl-ui)

## 创建 Teradata NOS 连接
<a name="creating-teradata-nos-connection"></a>

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

 **先决条件：**
+  如果您通过 Amazon VPC 访问您的 Teradata 环境，您的 Amazon VPC 配置应允许您的 AWS Glue 作业与 Teradata 环境进行通信。我们不建议通过公共互联网访问 Teradata 环境。
+  在 Amazon VPC 中，确定或创建 AWS Glue 将在执行作业时使用的 VPC、子网和安全组。此外，您的 Amazon VPC 配置需要允许您的 Teradata 实例与该位置之间的网络流量。您的作业需要与您的 Teradata 客户端端口建立 TCP 连接。有关 Teradata 端口的更多信息，请参阅 [Teradata Vantage 的安全组](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 连接选项](https://docs.teradata.com/r/Teradata-VantageCloud-Enterprise/Get-Started/Connecting-Your-Environment/AWS-Connectivity-Options)。

### 配置 AWS Glue Teradata NOS 连接：
<a name="creating-teradata-nos-connection-procedure"></a>

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

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

1.  在 AWS Glue 控制台中，按照 [添加 AWS Glue 连接](https://docs.aws.amazon.com/glue/latest/dg/console-connections.html)中的步骤创建一个连接。创建连接后，保留连接名称 {{connectionName}}，以供下一步使用。
   +  选择**连接类型**时，请选择 Teradata Vantage NOS。
   +  在提供 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 Vantage NOS 连接后，您需要执行以下操作，然后才能调用您的连接方法。

1.  向与您的 AWS Glue 作业关联的 IAM 角色授予读取 {{secretName}} 的权限。

1.  在 AWS Glue 作业配置中，提供 {{connectionName}} 作为**连接**下的**附加网络连接**。

## 从 Teradata 表读取
<a name="reading-from-teradata-nos-tables"></a>

### 先决条件：
<a name="w2aac67c11c24b8c41c17b3"></a>
+  您要读取的 Teradata 表。您需要表名 {{tableName}}。
+  Teradata 环境拥有对 `staging_fs_url` 选项 {{stagingFsUrl}} 指定的 Amazon S3 路径的写入访问权限。
+  与 AWS Glue 作业关联的 IAM 角色拥有对 `staging_fs_url` 选项指定的 Amazon S3 位置的写入访问权限。
+  为了提供身份验证信息而配置的 AWS Glue Teradata NOS 连接。完成[配置 AWS Glue Teradata NOS 连接：](#creating-teradata-nos-connection-procedure)步骤，以配置您的身份验证信息。您需要 AWS Glue 连接的名称 {{connectionName}}。

 示例：

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

 您还可以提供 SELECT SQL 查询来筛选返回到 DynamicFrame 的结果。您将需要配置查询。如果同时配置 dbTable 和查询，则连接器无法读取数据。例如：

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

 此外，您可以使用 Spark DataFrame API 从 Teradata 表读取。例如：

```
options = {
    "url": {{"JDBC_URL"}},
    "dbtable": {{"tableName"}},
    "user": {{"teradataUsername"}}, # or use "username" as key here
    "password": {{"teradataPassword"}},
    "staging_fs_url": {{"stagingFsUrl}}"
}
teradata_read_table = spark.read.format("teradatanos").option(**options).load()
```

## 写入 Teradata 表
<a name="writing-to-teradata-nos-tables"></a>

### 先决条件
<a name="writing-to-teradata-nos-tables-prerequisites"></a>
+  您要写入的 Teradata 表：{{tableName}}。
+  Teradata 环境拥有对 `staging_fs_url` 选项 {{stagingFsUrl}} 指定的 Amazon S3 位置的读取访问权限。
+  与 AWS Glue 作业关联的 IAM 角色拥有对 `staging_fs_url` 选项指定的 Amazon S3 位置的写入访问权限。
+  为了提供身份验证信息而配置的 AWS Glue Teradata 连接。完成[配置 AWS Glue Teradata NOS 连接：](#creating-teradata-nos-connection-procedure)中的步骤，以配置您的身份验证信息。您需要 AWS Glue 连接的名称 {{connectionName}}。

   例如：

  ```
  teradata_write = glueContext.write_dynamic_frame.from_options(
      frame=dynamicFrame,
      connection_type= {{"teradatanos"}},
      connection_options={
          "connectionName": {{"connectionName"}}, 
          "dbtable": {{"tableName"}},
          "staging_fs_url": {{"stagingFsUrl"}}
      }
  )
  ```

## Teradata 连接选项参考
<a name="teradata-nos-connection-option-reference"></a>

 **连接和操作选项：**
+  `connectionName`：必需。用于读/写。为了向您的连接方法提供身份验证和网络信息而配置的 AWS Glue Teradata 连接的名称。
+  `staging_fs_url`：必需。用于读/写。Amazon S3 中的一个可写入位置，用于从 Teradata 读取时卸载的数据，及用于在写入 Teradata 时加载到 Redshift 的 Parquet 数据。S3 存储桶与您的 AWS Glue 作业必须位于同一区域。
+  `dbtable` – 对于写入为必填项，对于读取也为必填项，但提供了 `query` 时除外。用于读/写。您的连接方法将与之交互的表的名称。
+  `query` – 用于读取。用来定义从 Teradata 读取数据时要检索的内容的 SQL SELECT 查询。如果提供了 `dbtable` 选项，则您无法通过。
+  `clean_staging_s3_dir`–可选。用于读/写。如果为 true，请在读取或写入之后清理暂存 Amazon S3 对象。默认值为 true。
+  `pre_actions`–可选。用于写入。以分号分隔的 SQL 命令列表，这些命令在 Spark 与 Teradata Vantage 之间传输数据之前执行。
+  `post_actions`–可选。用于写入。以分号分隔的 SQL 命令列表，这些命令在 Spark 与 Teradata Vantage 之间传输数据之后执行。
+  `truncate`–可选。用于写入。如果为 true，则在覆盖模式下写入时，连接器会截断表。如果为 false，则在覆盖模式下写入时，连接器会删除表。默认值为 False。
+  `create_table_script`–可选。用于写入。写入 Teradata Vantage 时用于创建表的 SQL 语句。当您想使用自定义元数据创建表（例如，CREATE MULTISET 或 SET 表或更改主索引）时非常有用。请注意，创建表脚本中使用的表名称应与 `dbtable` 选项中指定的表名称匹配。
+  `partition_size_in_mb`–可选。用于读取。读取暂存 Amazon S3 对象时 Spark 分区的最大大小（以 MB 为单位）。原定设置值为 128。

 您可以在创建 Teradata 节点时提供高级选项。这些选项与编程 Spark 脚本的 AWS Glue 时可用的选项相同。

 请参阅[Teradata Vantage 连接](aws-glue-programming-etl-connect-teradata-home.md)。

 **授权选项：**

 以下是用于提供 AWS 账户凭证的选项，连接器使用这些凭证访问暂存 Amazon S3 存储桶。您可以选择 (1) 根本不提供任何授权选项，并使用从您的 AWS Glue 执行角色生成的临时凭证；或 (2) 提供您创建的授权对象 `auth_object`；或 (3) 如果使用长期凭证，则提供 `aws_access_key_id and aws_secret_access_key`；如果使用临时凭证，则提供 `aws_access_key`、`aws_secret_access_key` 和 `aws_session_token`。
+  `auth_object`：可选。用于访问暂存 Amazon S3 存储桶。在 Teradata 实例中创建的授权对象字符串。如果提供，则连接器将使用此授权对象访问暂存 Amazon S3 存储桶。如果未提供，并且`aws_access_key_id` 和 `aws_secret_access_key` 也未提供，则将从 AWS Glue 执行角色检索临时凭证并供连接器使用。与此授权对象关联的 AWS 账户必须与您的 AWS Glue 作业和暂存 Amazon S3 存储桶位于同一区域，或者已配置跨账户信任。
+  `aws_access_key_id`：可选。用于访问暂存 Amazon S3 存储桶。AWS 账户安全凭证的一部分。如果未提供 `auth_object`，并且 `aws_access_key_id` 与 `aws_secret_access_key` 一起提供，则连接器将使用它们来访问暂存 Amazon S3 存储桶。与此访问密钥关联的 AWS 账户必须与您的 AWS Glue 作业和暂存 Amazon S3 存储桶位于同一区域，或者已配置跨账户信任。
+  `aws_secret_access_key`：可选。用于访问暂存 Amazon S3 存储桶。AWS 账户安全凭证的一部分。如果未提供 `auth_object`，并且 `aws_secret_access_key` 与 `aws_access_key_id` 一起提供，则连接器将使用它们来访问暂存 Amazon S3 存储桶。与此私密密钥关联的 AWS 账户必须与您的 AWS Glue 作业和暂存 Amazon S3 存储桶位于同一区域，或者已配置跨账户信任。
+  `aws_session_token`：可选。用于访问暂存 Amazon S3 存储桶。临时 AWS 账户安全凭证的一部分。应提供 `aws_access_key_id` 和 `aws_secret_access_key`。

## 在 AWS Glue Visual ETL UI 中提供选项
<a name="teradata-nos-connection-option-visual-etl-ui"></a>

 您可以在可视化 ETL 作业 UI 中提供上述所有选项。对于 connectionName 选项，应从 Teradata Vantage NOS 连接下拉列表中进行选择。对于所有其他选项，应通过自定义 Teradata Vantage NOS 属性以键值对的形式提供。

![窗口窗格显示已选中 Teradata NOS Vantage 连接。](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/teradata-nos-vantage-connection-options.png)
