

 从补丁 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/)。

# 历史记录模式
<a name="zero-etl-history-mode"></a>

利用历史记录模式，您可以将零 ETL 集成配置为直接在 Amazon Redshift 中跟踪源表中记录的每个版本（包括更新和删除）。您可以对所有数据运行高级分析，例如运行历史分析、生成回顾报告、执行趋势分析以及向基于 Amazon Redshift 构建的下游应用程序发送增量更新。多个 Amazon Redshift 零 ETL 集成支持历史记录模式，包括 Amazon Aurora MySQL、Amazon Aurora PostgreSQL、Amazon RDS for MySQL 和 Amazon DynamoDB。多个应用程序也支持历史记录模式，例如 Salesforce、SAP、ServiceNow 和 Zendesk。

您可以从 Amazon Redshift 控制台 ([https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)) 启用和禁用零 ETL 集成的历史记录模式。使用历史记录模式跟踪集成来源中已删除或修改的记录。跟踪在目标 Amazon Redshift 数据仓库中执行。启用历史记录模式不会影响针对这些表的常规分析查询的性能。

开启历史记录模式后，您在来源中删除的表将不会在 Amazon Redshift 中删除。相反，表将以 `DroppedSource` 状态出现，您仍然可以查询这些表。您仍然可以在常规 SQL 中使用 DROP 和 RENAME 命令。

如果您想在来源上重用相同的表名称，则必须先 DROP 或 RENAME 相应的 `DroppedState` 表，然后才能将其复制到 Amazon Redshift。在来源上创建表之前，请务必先执行此操作。

有关使用历史记录模式时的注意事项的信息，请参阅[在目标上使用历史记录模式时的注意事项](zero-etl.reqs-lims.md#zero-etl-considerations-history-mode)。

**管理零 ETL 集成的历史记录模式**

1. 登录到 AWS 管理控制台并打开 Amazon Redshift 控制台，网址：[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)。

1. 从左侧导航窗格中，选择**无服务器**或**预置集群**控制面板。然后，选择**零 ETL 集成**。

1. 选择要管理的零 ETL 集成，然后选择**管理历史记录模式**。这将显示**管理历史记录模式**窗口。

1. 您可以为从具有单一源表（例如 Amazon DynamoDB）的来源类型复制的目标表**禁用**或**启用**历史记录模式。当零 ETL 集成具有多个可能的目标表时，您可以**为所有现有表和将来表禁用**、**为所有现有表和将来表启用**或**为单个表管理历史记录模式**。创建零 ETL 集成时，默认值为历史记录模式 `off`。

   在将历史记录模式设置为 `on` 后，会将以下列添加到目标表中以跟踪来源中的更改。历史记录模式 `on` 会增加每月使用量和成本，因为 Amazon Redshift 不会删除目标表中的任何记录。删除或更改任何源记录都会在目标记录中创建一条新记录，这会增加包含多个记录版本的目标中的总行数。在源表中删除或修改记录时，不会从目标表中删除该记录。您可以通过删除非活动记录来管理目标表。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/zero-etl-history-mode.html)

   通过筛选列 `_record_is_active` 为 false 的记录，可以从历史记录模式表中删除非活动记录。以下 SQL DELETE 命令从 id 列小于或等于 100 的表中删除非活动记录。删除记录后，在自动 vacuum 操作删除运行时，将回收已删除记录的存储空间。

   ```
   DELETE FROM myschema.mytable where not _record_is_active AND id <= 100;
   ```

   在将历史记录模式设置为 `off` 后，Amazon Redshift 会在目标数据库中创建表副本，其中包含活动记录，但不包含添加的历史记录列。Amazon Redshift 将您的表重命名为 `table-name_historical_timestamp` 以供您使用。如果您不再需要表的副本，则可以将其删除。可以使用 ALTER TABLE 命令重命名这些表。例如：

   ```
   ALTER TABLE [schema-name.]table-name_historical_timestamp RENAME TO new_table_name;
   ```

   有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [ALTER TABLE](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE.html)。

也可以使用 SQL 命令 CREATE DATABASE 和 ALTER DATABASE 管理历史记录模式。有关如何设置 HISTORY\$1MODE 的更多信息，请参阅《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)。