

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 将零 ETL 集成与 Amazon Redshift 结合使用时的注意事项
<a name="zero-etl.reqs-lims"></a>

Amazon Redshift 的零 ETL 集成有以下注意事项。
+ 您的目标 Amazon Redshift 数据仓库必须满足以下先决条件：
  + 运行 Amazon Redshift Serverless 或 RA3 节点类型。
  + 已加密（如果使用预置集群）。
  + 已启用区分大小写。
+ 如果您删除某个源而该源是 Amazon Redshift 数据仓库的授权集成源，则所有关联的集成都将进入 `FAILED` 状态。之前复制的所有数据都将保留在 Amazon Redshift 数据库中，并且可以进行查询。
+ 目标数据库是只读的。您无法在目标数据库中创建表、视图或实体化视图。但是，您可以在目标数据仓库中的其他表上使用实体化视图。
+ 只有在跨数据库查询中使用时才支持实体化视图。有关通过零 ETL 集成复制的数据创建实体化视图的信息，请参阅[使用实体化视图查询复制的数据](zero-etl-using.querying-and-creating-materialized-views.md#zero-etl-using.transforming)。
+ 默认情况下，您只能查询目标数据仓库中处于 `Synced` 状态的表。要查询处于其他状态的表，请将数据库参数 `QUERY_ALL_STATES` 设置为 `TRUE`。有关设置 `QUERY_ALL_STATES` 的信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) 和 [ALTER DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATABASE.html)。有关数据库状态的更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [SVV\$1INTEGRATION\$1TABLE\$1STATE](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_INTEGRATION_TABLE_STATE.html)。
+ Amazon Redshift 仅接受 UTF-8 字符，因此它可能不支持源中定义的排序规则。排序和比较规则可能有所不同，这最终会改变查询结果。
+ 每个 Amazon Redshift 数据仓库目标的零 ETL 集成限制为 50 个。
+ 集成源中的表必须具有主键。否则，您的表无法复制到 Amazon Redshift 中的目标数据仓库。

  有关如何向 Amazon Aurora PostgreSQL 添加主键的信息，请参阅 *AWS 数据库博客* 中的 [Handle tables without primary keys while creating Amazon Aurora PostgreSQL zero-ETL integrations with Amazon Redshift](https://aws.amazon.com/blogs/database/handle-tables-without-primary-keys-while-creating-amazon-aurora-postgresql-zero-etl-integrations-with-amazon-redshift/)。有关如何向 Amazon Aurora MySQL 或 RDS for MySQL 添加主键的信息，请参阅 *AWS 数据库博客*中的 [Handle tables without primary keys while creating Amazon Aurora MySQL or Amazon RDS for MySQL zero-ETL integrations with Amazon Redshift](https://aws.amazon.com/blogs/database/handle-tables-without-primary-keys-while-creating-amazon-aurora-mysql-or-amazon-rds-for-mysql-zero-etl-integrations-with-amazon-redshift/)。
+ 您可以使用适用于 Amazon 零 ETL 集成的数据筛选，来定义从源 Aurora 数据库集群复制到目标 Amazon Redshift 数据仓库的范围。您可以定义一个或多个筛选条件，选择性地在复制中包括或排除某些表，而不是将所有数据都复制到目标。有关更多信息，请参阅《Amazon Aurora 用户指南》**中的 [Aurora 与 Amazon Redshift 零 ETL 集成的数据筛选](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/zero-etl.filtering.html)。
+ 对于 Aurora PostgreSQL 与 Amazon Redshift 的零 ETL 集成，Amazon Redshift 最多支持 Aurora PostgreSQL 中的 100 个数据库。每个数据库都独立地从源数据库复制到目标数据库。
+ 在将数据从事务数据存储复制到 Amazon Redshift 时，零 ETL 集成不支持转换。数据从源数据库按原样复制。不过，您可以在 Amazon Redshift 中对复制的数据应用转换。
+ 零 ETL 集成使用并行连接在 Amazon Redshift 中运行。该集成使用通过集成创建数据库的用户的凭证运行。查询运行时，这些连接在同步（写入）过程中不会启动并发扩展。并发扩展读取（从 Amazon Redshift 客户端）适用于同步对象。
+ 您可以设置 `REFRESH_INTERVAL` 来实现零 ETL 集成，从而控制将数据复制到 Amazon Redshift 的频率。有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) 和 [ALTER DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATABASE.html)。
+ 通过与 Amazon DynamoDB 的零 ETL 集成创建 Amazon Redshift 数据库后，数据库状态应从**正在创建**更改为**活动**。这会开始将源 DynamoDB 表中的数据复制到目标 Redshift 表，这些表是在目标数据库 (`ddb_rs_customerprofiles_zetl_db`) 的公有架构下创建的。

## 在目标上使用历史记录模式时的注意事项
<a name="zero-etl-considerations-history-mode"></a>

在目标数据库上使用历史记录模式时，有以下注意事项。有关更多信息，请参阅 [历史记录模式](zero-etl-history-mode.md)。
+ 当您从来源中删除某个表时，不会从目标中删除该表，但该表的状态将变为 `DroppedSource`。您可以从 Amazon Redshift 数据库中删除或重命名表。
+ 当您从来源中截断表时，将在目标表上执行删除操作。例如，如果来源上的所有记录被截断，则目标列 `_record_is_active` 上的相应记录将更改为 `false`。
+ 在目标表上运行 TRUNCATE 表 SQL 时，活动历史记录行将被标记为非活动，并带有相应的时间戳。
+ 在将表中的某个行设置为非活动状态时，系统会在短暂延迟（大约 10 分钟）后将其删除。要删除非活动行，请使用查询编辑器 v2 或其他 SQL 客户端，连接到零 ETL 数据库。
+ 您只能从已启用历史记录模式的表中删除非活动行。例如，类似于以下内容的 SQL 命令仅删除非活动行。

  ```
  delete from schema.user_table where _record_delete_time <= '2024-09-10 12:34:56'
  ```

  这与如下 SQL 命令等效。

  ```
  delete from schema.user_table where _record_delete_time <= '2024-09-10 12:34:56' and _record_is_active = False
  ```
+ 在禁用表的历史记录模式后，所有历史数据将保存到一个名为 `<schema>.<table-name>_historical_<timestamp>` 的表中，并将刷新名为 `<schema>.<table-name>` 的原始表。
+ 在使用表筛选器从复制中排除已启用历史记录模式的表时，所有行都将设置为非活动状态，并且表的状态将更改为 `DroppedSource`。有关表筛选器的更多信息，请参阅《Amazon Aurora 用户指南》**中的 [Aurora 与 Amazon Redshift 零 ETL 集成的数据筛选](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/zero-etl.filtering.html)。
+ 只能为处于 `Synced` 状态的表将历史记录模式切换到 `true` 或 `false`。
+ 开启历史记录模式的表的实体化视图是在完全重新计算时创建的。

## 零 ETL 集成源是 Aurora 或 Amazon RDS 时的注意事项
<a name="zero-etl-considerations-aurora-rds"></a>

Aurora 和 Amazon RDS 与 Amazon Redshift 的零 ETL 集成有以下注意事项。
+ 您可为 Aurora 和 RDS for MySQL 零 ETL 集成使用数据筛选，从而定义从源数据库集群复制到目标 Amazon Redshift 数据仓库的范围。您可以定义一个或多个筛选条件，选择性地在复制中包括或排除某些表，而不是将所有数据都复制到目标。有关更多信息，请参阅《Amazon Aurora 用户指南》**中的 [Aurora 与 Amazon Redshift 零 ETL 集成的数据筛选](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/zero-etl.filtering.html)。
+ 集成源中的表必须具有主键。否则，您的表无法复制到 Amazon Redshift 中的目标数据仓库。

  有关如何向 Amazon Aurora PostgreSQL 添加主键的信息，请参阅 *AWS 数据库博客* 中的 [Handle tables without primary keys while creating Amazon Aurora PostgreSQL zero-ETL integrations with Amazon Redshift](https://aws.amazon.com/blogs/database/handle-tables-without-primary-keys-while-creating-amazon-aurora-postgresql-zero-etl-integrations-with-amazon-redshift/)。有关如何向 Amazon Aurora MySQL 或 RDS for MySQL 添加主键的信息，请参阅 *AWS 数据库博客*中的 [Handle tables without primary keys while creating Amazon Aurora MySQL or Amazon RDS for MySQL zero-ETL integrations with Amazon Redshift](https://aws.amazon.com/blogs/database/handle-tables-without-primary-keys-while-creating-amazon-aurora-mysql-or-amazon-rds-for-mysql-zero-etl-integrations-with-amazon-redshift/)。
+ Amazon Redshift VARCHAR 数据类型的最大长度为 65535 个字节。当来自该源的内容不符合此限制时，复制将无法继续，系统会将表置于失败状态。您可以将数据库参数 `TRUNCATECOLUMNS` 设置为 `TRUE` 来截断内容以适合列。有关设置 `TRUNCATECOLUMNS` 的信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) 和 [ALTER DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATABASE.html)。

  有关零 ETL 集成源和 Amazon Redshift 数据库之间的数据类型差异的更多信息，请参阅《Amazon Aurora 用户指南》**中的 [Aurora 和 Amazon Redshift 之间的数据类型差异](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/zero-etl.querying.html#zero-etl.data-type-mapping)。

对于 Aurora 源，另请参阅《Amazon Aurora 用户指南》**中的[限制](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/zero-etl.html#zero-etl.reqs-lims)。

对于 Amazon RDS 源，另请参阅《Amazon RDS 用户指南》**中的[限制](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/zero-etl.html#zero-etl.reqs-lims)。

## 零 ETL 集成源是 DynamoDB 时的注意事项
<a name="zero-etl-considerations-ddb"></a>

DynamoDB 与 Amazon Redshift 的零 ETL 集成有以下注意事项。
+ 不支持 DynamoDB 中超过 127 个字符的表名。
+ 来自 DynamoDB 零 ETL 集成的数据映射到 Amazon Redshift 中的 SUPER 数据类型列。
+ 不支持超过 127 个字符的分区键或排序键列名。
+ DynamoDB 的零 ETL 集成只能映射到一个 Amazon Redshift 数据库。
+ 对于分区键和排序键，最大精度和小数位数为 (38,18)。DynamoDB 中的数字数据类型支持的最大精度高达 38。Amazon Redshift 也支持 38 的最大精度，但 Amazon Redshift 中的默认小数精度/位数为 (38,10)。这意味着小数位数值会被截断。
+ 要成功实现零 ETL 集成，DynamoDB 项中的单个属性（由名称\$1值组成）不得大于 64 KB。
+ 激活后，零 ETL 集成会导出整个 DynamoDB 表来填充 Amazon Redshift 数据库。完成这个初始过程所花的时间取决于 DynamoDB 表大小。然后，零 ETL 集成使用 DynamoDB 增量导出功能以增量方式将更新从 DynamoDB 复制到 Amazon Redshift。这意味着 Amazon Redshift 中复制的 DynamoDB 数据会自动保持最新。

  目前，DynamoDB 零 ETL 集成的最小延迟为 15 分钟。您可以通过为零 ETL 集成设置非零 `REFRESH_INTERVAL` 来进一步增大此延迟。有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) 和 [ALTER DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATABASE.html)。

对于 Amazon DynamoDB 源，另请参阅《Amazon DynamoDB 开发人员指南》**中的 [Prerequisites and limitations](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/RedshiftforDynamoDB-zero-etl.html#RedshiftforDynamoDB-zero-etl-prereqs)。

## 当零 ETL 集成源是应用程序（例如 Salesforce、SAP、ServiceNow 和 Zendesk）时的注意事项
<a name="zero-etl-considerations-glue"></a>

以下注意事项适用于 Amazon Redshift 的源应用程序，例如 Salesforce、SAP、ServiceNow 和 Zendesk。
+ 不支持来自应用程序源的表名称和列名称超过 127 个字符。
+ Amazon Redshift VARCHAR 数据类型的最大长度为 65535 个字节。当来自该源的内容不符合此限制时，复制将无法继续，系统会将表置于失败状态。您可以将数据库参数 `TRUNCATECOLUMNS` 设置为 `TRUE` 来截断内容以适合列。有关设置 `TRUNCATECOLUMNS` 的信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) 和 [ALTER DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATABASE.html)。

  有关零 ETL 集成应用程序源和 Amazon Redshift 数据库之间的数据类型差异的更多信息，请参阅《AWS Glue 开发人员指南》**中的[零 ETL 集成](https://docs.aws.amazon.com/glue/latest/dg/zero-etl-using.html)。
+ 与应用程序的零 ETL 集成的最小延迟为 1 小时。您可以通过为零 ETL 集成设置非零 `REFRESH_INTERVAL` 来进一步增大此延迟。有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) 和 [ALTER DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATABASE.html)。

有关与应用程序的零 ETL 集成的源，另请参阅《AWS Glue 开发人员指南》**中的[零 ETL 集成](https://docs.aws.amazon.com/glue/latest/dg/zero-etl-using.html)。