

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 通过以下方式连接 Netezza AWS Schema Conversion Tool
<a name="CHAP_Source.Netezza"></a>

您可以使用 AWS SCT 将架构、代码对象和应用程序代码从 Netezza 转换为 Amazon Redshift。

## 将 Netezza 用作源的权限
<a name="CHAP_Source.Netezza.Permissions"></a>

下面列出了将 Netezza 用作源所需的权限：
+ SELECT ON SYSTEM.DEFINITION\$1SCHEMA.SYSTEM VIEW
+ SELECT ON SYSTEM.DEFINITION\$1SCHEMA.SYSTEM TABLE
+ SELECT ON SYSTEM.DEFINITION\$1SCHEMA.MANAGEMENT TABLE
+ 列在 *<database\$1name>*
+ 列在 *<schema\$1name>*
+ 在.all *<database\$1name>* .table 上列出
+ 在 *<database\$1name>* .all.external 表上列出
+ 在 .all *<database\$1name>* .view 上列出
+ *<database\$1name>*.all.materialized 视图上的列表
+ 在.all *<database\$1name>* .proceduce 上
+ 列出.all *<database\$1name>* .sequence
+ .all *<database\$1name>* .function 上列出
+ 在.all *<database\$1name>* .aggregate 上

在上述示例中，替换以下占位符：
+ 将 *database\$1name* 替换为源数据库的名称。
+ 将 *schema\$1name* 替换为源架构的名称。

AWS SCT 需要访问以下系统表和视图。您可以授予对这些对象的访问权限，而不必授予对上述列表中的 `system.definition_schema.system view` 和 `system.definition_schema.system tables` 的访问权限。
+ select on system.definition\$1schema.\$1t\$1aggregate
+ select on system.definition\$1schema.\$1t\$1class
+ select on system.definition\$1schema.\$1t\$1constraint
+ select on system.definition\$1schema.\$1t\$1const\$1relattr
+ select on system.definition\$1schema.\$1t\$1database
+ select on system.definition\$1schema.\$1t\$1grpobj\$1priv
+ select on system.definition\$1schema.\$1t\$1grpusr
+ select on system.definition\$1schema.\$1t\$1hist\$1config
+ select on system.definition\$1schema.\$1t\$1object
+ select on system.definition\$1schema.\$1t\$1object\$1classes
+ select on system.definition\$1schema.\$1t\$1proc
+ select on system.definition\$1schema.\$1t\$1type
+ select on system.definition\$1schema.\$1t\$1user
+ select on system.definition\$1schema.\$1t\$1usrobj\$1priv
+ select on system.definition\$1schema.\$1vt\$1sequence
+ select on system.definition\$1schema.\$1v\$1aggregate
+ select on system.definition\$1schema.\$1v\$1constraint\$1depends
+ select on system.definition\$1schema.\$1v\$1database
+ select on system.definition\$1schema.\$1v\$1datatype
+ select on system.definition\$1schema.\$1v\$1dslice
+ select on system.definition\$1schema.\$1v\$1function
+ select on system.definition\$1schema.\$1v\$1group
+ select on system.definition\$1schema.\$1v\$1obj\$1relation
+ select on system.definition\$1schema.\$1v\$1obj\$1relation\$1xdb
+ select on system.definition\$1schema.\$1v\$1procedure
+ select on system.definition\$1schema.\$1v\$1relation\$1column
+ select on system.definition\$1schema.\$1v\$1relation\$1keydata
+ select on system.definition\$1schema.\$1v\$1relobjclasses
+ select on system.definition\$1schema.\$1v\$1schema\$1xdb
+ select on system.definition\$1schema.\$1v\$1sequence
+ select on system.definition\$1schema.\$1v\$1synonym
+ select on system.definition\$1schema.\$1v\$1system\$1info
+ select on system.definition\$1schema.\$1v\$1sys\$1constraint
+ select on system.definition\$1schema.\$1v\$1sys\$1object\$1dslice\$1info
+ select on system.definition\$1schema.\$1v\$1sys\$1user
+ select on system.definition\$1schema.\$1v\$1table
+ select on system.definition\$1schema.\$1v\$1table\$1constraint
+ select on system.definition\$1schema.\$1v\$1table\$1dist\$1map
+ select on system.definition\$1schema.\$1v\$1table\$1organize\$1column
+ select on system.definition\$1schema.\$1v\$1table\$1storage\$1stat
+ select on system.definition\$1schema.\$1v\$1user
+ select on system.definition\$1schema.\$1v\$1view
+ select on system.information\$1schema.\$1v\$1relation\$1column
+ select on system.information\$1schema.\$1v\$1table
+ select on \$1hist\$1column\$1access\$1\$1

## 连接到作为源的 Netezza
<a name="CHAP_Source.Netezza.Connecting"></a>

使用 AWS Schema Conversion Tool按照以下过程连接到 Netezza 源数据库。

**连接到 Netezza 源数据库**

1. 在中 AWS Schema Conversion Tool，选择**添加来源**。

1. 选择 **Netezza**，然后选择**下一步**。

   此时显示**添加源**对话框。

1. 对于**连接名称**，输入数据库的名称。 AWS SCT 会在左侧面板的树中显示此名称。

1. 使用来自的数据库凭据 AWS Secrets Manager 或手动输入：
   + 要使用 Secrets Manager 中的数据库凭证，请按照以下说明进行操作：

     1. 对于 **AWS 密钥**，输入密钥名称。

     1. 选择**填充**可使用 Secrets Manager 中的数据库凭证自动填写数据库连接对话框中的所有值。

     有关使用 Secrets Manager 中的数据库凭证的信息，请参阅[AWS Secrets Manager 在中配置 AWS Schema Conversion Tool](CHAP_UserInterface.SecretsManager.md)。
   + 要手动输入 Netezza 源数据库的连接信息，请按照以下说明进行操作：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/SchemaConversionTool/latest/userguide/CHAP_Source.Netezza.html)

1. 选择 “**测试连接**” 以验证是否 AWS SCT 可以连接到您的源数据库。

1. 选择**连接**以连接到源数据库。

## 配置持续的数据复制
<a name="CHAP_Source.Netezza.CDC"></a>

转换您的 Netezza 数据库架构并将其应用于 Amazon Redshift 数据库后，您可以使用数据提取代理迁移数据 AWS SCT 。代理会提取数据并将其上载到 Amazon S3 存储桶。然后，您可以使用将数据从亚马逊 S3 复制 AWS SCT 到 Amazon Redshift。

如果源数据库中的数据在迁移过程中发生了变化，则可以使用 AWS SCT 数据提取代理捕获正在进行的更改。然后，您可以在完成初始数据迁移后将这些正在进行的更改复制到目标数据库中。此过程称为持续的数据复制或*更改数据捕获*（CDC）。

**为从 Netezza 迁移到 Amazon Redshift 配置持续的数据复制**

1. 在源数据库中，创建一个历史数据库。您可在 Netezza 命令行界面（CLI）中使用以下代码示例。

   ```
   nzhistcreatedb -d history_database_name -t query -v 1 -u load_user -o histdb_owner -p your_password
   ```

   在前面的示例中，*history\$1database\$1name*替换为历史数据库的名称。接下来，*load\$1user*替换为您定义的用于将历史数据加载到数据库的用户名。然后，*histdb\$1owner*替换为您定义为历史数据库所有者的用户名。请确保您已经创建了此用户并授予了 `CREATE DATABASE` 权限。最后，*your\$1password*替换为安全密码。

1. 配置历史日志记录。为此，请使用以下代码示例。

   ```
   CREATE HISTORY CONFIGURATION history_configuration_name HISTTYPE QUERY
       DATABASE history_database_name USER load_user PASSWORD your_password COLLECT PLAN, COLUMN
       LOADINTERVAL 1 LOADMINTHRESHOLD 0 LOADMAXTHRESHOLD 0 STORAGELIMIT 25
       LOADRETRY 2 VERSION 1;
   ```

   在前面的示例中，将*history\$1configuration\$1name*和*history\$1database\$1name*替换为历史配置和历史数据库的名称。接下来，*load\$1user*替换为您定义的用于将历史数据加载到数据库的用户名。然后，*your\$1password*替换为安全密码。

1. 授予历史数据库中所有表的读取权限。您可以使用以下代码示例授予 `SELECT` 权限。

   ```
   GRANT SELECT ON history_database_name.ALL.TABLE TO your_user;
   ```

   在前面的示例中，*history\$1database\$1name*替换为历史数据库的名称。接下来，*your\$1user*替换为使用您的 Netezza 数据库的最低权限的用户名。您可以在中使用该数据库用户的凭据 AWS SCT。

1. 收集源架构中每个表的统计数据，以获取有关列基数的信息。您可使用以下命令在历史数据库中生成统计数据。

   ```
   GENERATE STATISTICS on "schema_name"."table_name";
   ```

   在前面的示例中，将*schema\$1name*和*table\$1name*替换为数据库架构和表的名称。

1. 通过运行以下查询，确保您已完成先决条件：

   ```
   SELECT COUNT(*) FROM history_database_name.history_schema_name."$hist_column_access_N";
   ```

   在前面的示例中，将*history\$1database\$1name*和*history\$1schema\$1name*替换为历史数据库和架构的名称。接下来，*N*用历史数据库的版本号替换。有关历史数据库版本的更多信息，请参阅 [IBM Netezza 文档](https://www.ibm.com/docs/en/netezza?topic=history-database-versions)。

1. 安装数据提取代理。有关更多信息，请参阅 [安装提取代理](agents.md#agents.Installing)。

   确保 `settings.properties` 文件中所有提取器实例的 `{working.folder}` 参数都指向同一个文件夹。在这种情况下，提取器可以协调 CDC 会话并为所有子任务使用单个事务点。

1. 注册您的数据提取代理。有关更多信息，请参阅 [在中注册提取剂 AWS Schema Conversion Tool](agents.md#agents.Using)。

1. 创建 CDC 任务。有关更多信息，请参阅 [创建、运行和监控 AWS SCT 任务](agents.md#agents.Tasks)。

   1. 在 AWS SCT中打开您的项目。在左窗格中，选择源表。打开上下文 (右键单击) 菜单，然后选择**创建本地任务**。

   1. 对于**任务名称**，请输入数据迁移任务的描述性名称。

   1. 对于**迁移模式**，选择**提取、上传和复制**。

   1. 选择**启用 CDC**。

   1. 选择 **CDC 设置**选项卡并定义 CDC 会话的范围和计划。

   1. 选择**测试任务**以验证是否可连接到您的工作文件夹、Amazon S3 存储桶和 Amazon Redshift 数据仓库。

   1. 选择**创建**以创建任务。

   1. 选择**任务**选项卡，从列表中选择您的任务，然后选择**开始**。

1. 该 AWS SCT 任务在目标数据库上保持事务一致性。数据提取代理按事务 ID 顺序从源复制事务。

   如果您停止任何迁移会话或迁移会话失败，则 CDC 处理也会停止。

## Netezza 到 Amazon Redshift 的转换设置
<a name="CHAP_Source.Netezza.ConversionSettings"></a>

要编辑 Netezza 到 Amazon Redshift 的转换设置，**请在 AWS SCT中选择** “设置”，然后**选择 “**转换设置”。从上方的列表中选择 Nete **zza，然后选择 Netezza** **— Amazon Redshift**。 AWS SCT 显示 Netezza 到 Amazon Redshift 转换的所有可用设置。

中的 Netezza 到 Amazon Redshift AWS SCT 的转换设置包括以下选项：
+ 限制转换后的代码中操作项的注释数量。

  对于在**转换后的代码中为所选严重性及更高的措施项添加注释**，请选择措施项的严重性。 AWS SCT 在转换后的代码中为选定严重性及更高的措施项添加注释。

  例如，要最大限度地减少转换后的代码中的注释数量，请选择**仅错误**。要在转换后的代码中包含所有操作项的注释，请选择**所有消息**。
+ 设置 AWS SCT 可以应用于您的目标 Amazon Redshift 集群的最大表数。

  对于**目标 Amazon Redshift 集群的最大表**数，请选择 AWS SCT 可以应用于您的 Amazon Redshift 集群的表数量。

  Amazon Redshift 具有限制了不同集群节点类型使用表数的配额。如果您选择 “**自动**”，则根据节点类型 AWS SCT 确定要应用于目标 Amazon Redshift 集群的表数量。或者，手动选择值。有关更多信息，请参阅《Amazon Redshift 管理指南》**中的 [Amazon Redshift 中的配额和限制](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html)。

  AWS SCT 转换您的所有源表，即使这超过了您的 Amazon Redshift 集群所能存储的容量。 AWS SCT 将转换后的代码存储在您的项目中，并且不会将其应用于目标数据库。如果应用转换后的代码时达到了 Amazon Redshift 集群的表配额，则 AWS SCT 会显示一条警告消息。此外，还要 AWS SCT 将表应用于您的目标 Amazon Redshift 集群，直到表的数量达到上限。
+ 对 Amazon Redshift 表列应用压缩。为此，请选择**使用压缩编码**。

  AWS SCT 使用默认 Amazon Redshift 算法自动为列分配压缩编码。有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的[压缩编码](https://docs.aws.amazon.com/redshift/latest/dg/c_Compression_encodings.html)。

  默认情况下，Amazon Redshift 不对定义为排序键和分配键的列应用压缩。您可以更改此行为并对这些列进行压缩。为此，请选择**为 KEY 列使用压缩编码**。只有选择**使用压缩编码**选项时，才能选择此选项。

## Netezza 到 Amazon Redshift 的转换优化设置
<a name="CHAP_Source.Netezza.ConversionOptimizationSettings"></a>

要编辑 Netezza 到 Amazon Redshift 的转化优化设置，请在 AWS SCT中**选择 “**设置”，然后**选择 “**转化设置”。从上方的列表中选择 **Netezza**，然后选择 **Netezza – Amazon Redshift**。在左侧窗格中，选择**优化策略**。 AWS SCT 显示 Netezza 到 Amazon Redshift 转换的转化优化设置。

Netezza 到 Amazon Redshift AWS SCT 的转化优化设置包括以下选项：
+ 使用自动表优化。为此，请选择**使用 Amazon Redshift 自动调整表格**。

  自动表优化是 Amazon Redshift 中的一种自我调整过程，可自动优化表的设计。有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的[使用自动表优化](https://docs.aws.amazon.com/redshift/latest/dg/t_Creating_tables.html)。

  要仅使用自动表优化，请在**初始键选择策略**中选择**无**。
+ 使用策略选择排序键和分配键。

  您可以使用 Amazon Redshift 元数据、统计信息或这两个选项选择排序键和分配键。对于**优化策略**选项卡上的**初始键选择策略**，请选择以下选项之一：
  + 使用元数据，忽略统计信息
  + 忽略元数据，使用统计信息
  + 使用元数据和统计信息

  根据您选择的选项，您可以选择优化策略。然后，请为每种策略输入值（0–100）。这些值定义了每种策略的权重。 AWS SCT 使用这些权重值定义每条规则如何影响分布键和排序键的选择。默认值基于 AWS 迁移最佳实践。

  您可以为**查找小型表**策略定义小型表的大小。在 “**最小表格行数**” 和 “**最大表格行数**” 中，输入表格中最小和最大行数以将其定义为小表。 AWS SCT 将`ALL`分配方式应用于小表。在这种情况下，向每个节点分配整个表的副本。
+ 配置策略详细信息。

  除了定义每种优化策略的权重外，您还可以配置优化设置。为此，请选择**转换优化**。
  + 对于**排序键列数限制**，在排序键中输入最大列数。
  + 在**倾斜阈值**中，输入列偏斜值的百分比 (0—100)。 AWS SCT 从分布键的候选列表中排除倾斜值大于阈值的列。 AWS SCT 将列的偏斜值定义为最常见值的出现次数与记录总数的百分比比率。
  + 对于**查询历史表中的前 N 个查询**，请输入要分析的最常用查询的数量（1–100）。
  + 在**选择统计数据用户**中，选择要分析查询统计数据的数据库用户。

  此外，在**优化策略**选项卡上，您可以为**查找小型表**策略定义小型表的大小。在 “**最小表格行数**” 和 “**最大表格行数**” 中，输入表格中最小和最大行数，将其视为一个小表。 AWS SCT 将`ALL`分配方式应用于小表。在这种情况下，向每个节点分配整个表的副本。