Amazon RDS 与 Amazon Redshift 的零 ETL 集成问题排查 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon RDS 与 Amazon Redshift 的零 ETL 集成问题排查

这是 Amazon RDS 与 Amazon Redshift 的零 ETL 集成的预发布文档,该集成已提供预览版。文档和特征都可能会更改。我们建议您仅在测试环境中使用此特征,不要在生产环境中使用。有关预览条款和条件,请参阅 Amazon 服务条款中的测试版和预览

您可以通过在 Amazon Redshift 中查询 SVV_INTEGRATION 系统表来检查零 ETL 集成的状态。如果 state 列的值为 ErrorState,则表示有问题。有关更多信息,请参阅 使用系统表监控集成

使用以下信息来排查 Amazon RDS 与 Amazon Redshift 的零 ETL 集成的常见问题。

我无法创建零 ETL 集成

如果您无法创建零 ETL 集成,请确保您的源数据库实例的以下内容正确无误:

  • 您的源数据库正在运行 RDS for MySQL 版本 8.0.32 或更高版本。要验证引擎版本,请选择数据库配置选项卡,并检查引擎版本

  • 您已正确配置了数据库参数。如果所需参数设置不正确或与数据库实例不关联,则创建将失败。请参阅 步骤 1:创建自定义数据库参数组

此外,请确保您的数据仓库在以下方面正确无误:

我的集成卡在 Syncing 状态

如果您更改其中一个必需的数据库集群参数的值,则集成状态可能会始终显示为 Syncing

要修复此问题,请检查与源数据库关联的参数组中的参数值,并确保它们与所需值相匹配。有关更多信息,请参阅 步骤 1:创建自定义数据库参数组

如果您修改任何参数,请务必重启数据库来应用更改。

我的表未复制到 Amazon Redshift

您的数据可能未复制,因为一个或多个源表没有主键。Amazon Redshift 中的监控控制面板将这些表的状态显示为 Failed,而总体零 ETL 集成的状态更改为 Needs attention

要解决此问题,您可以在表中确定一个可以成为主键的现有键,也可以添加合成主键。有关详细解决方案,请参阅 Handle tables without primary keys while creating Amazon Aurora MySQL or Amazon RDS for MySQL zero-ETL integrations with Amazon Redshift

我的一个或多个 Amazon Redshift 表需要重新同步

在源数据库实例上运行某些命令可能需要重新同步您的表。在这些情况下,SVV_INTEGRATION_TABLE_STATE 系统视图显示 table_stateResyncRequired,这意味着集成必须将该特定表的数据从 MySQL 完全重新加载到 Amazon Redshift。

当表开始重新同步时,它进入 Syncing 状态。您无需执行任何手动操作即可重新同步表。在表数据重新同步时,您无法在 Amazon Redshift 中访问这些数据。

以下是一些可以使表进入 ResyncRequired 状态的示例操作,以及可供考虑的可能替代方案。

操作 示例 或者
在特定位置添加一列
ALTER TABLE table_name ADD COLUMN column_name INTEGER NOT NULL first;
Amazon Redshift 不支持使用 firstafter 关键字将列添加到特定位置。如果目标表中列的顺序不重要,请使用更简单的命令将该列添加到表的末尾:
ALTER TABLE table_name ADD COLUMN column_name column_type;
使用默认 CURRENT_TIMESTAMP 添加时间戳列
ALTER TABLE table_name ADD COLUMN column_name TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
现有表行的 CURRENT_TIMESTAMP 值由 RDS for MySQL 计算,如果不进行完整表数据重新同步,就无法在 Amazon Redshift 中进行模拟。

如果可能,请将默认值切换为文本常量(例如 2023-01-01 00:00:15),以避免表可用性出现延迟。

在单个命令中执行多个列操作
ALTER TABLE table_name ADD COLUMN column_1, RENAME COLUMN column_2 TO column_3;
考虑将命令拆分为两个单独的操作(ADDRENAME),这不需要重新同步。