

 从补丁 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="t_updating-inserting-using-staging-tables-"></a>

您可以使用 MERGE 命令高效地向现有表中添加新数据。执行合并操作，方法是创建暂存表，然后使用本节中描述的方法之一从暂存表更新目标表。有关 MERGE 命令的更多信息，请参阅[MERGE](r_MERGE.md)。

[合并示例](merge-examples.md)使用名为 TICKIT 数据集的 Amazon Redshift 示例数据集。作为先决条件，您可以按照[开始使用常见数据库任务](https://docs.aws.amazon.com/redshift/latest/gsg/database-tasks.html)中提供的说明设置 TICKIT 表和数据。有关示例数据集的更多详细信息可在[示例数据库](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)中找到。

## 合并方法 1：替换现有行
<a name="merge-method-replace-existing-rows"></a>

如果您要覆盖目标表中的所有列，执行合并的最快方法是替换现有行。这将通过使用内部联接删除将要更新的行，从而仅需扫描目标表一次。在删除某些行后，通过从暂存表执行单个插入操作即可使用新行来替换它们。

请在满足以下所有条件时用此方法：
+ 您的目标表和暂存表包含相同的列。
+ 您要将目标表列中的所有数据替换为所有的暂存表列。
+ 您将在合并操作中使用暂存表中的所有行。

如果未满足以上任一条件，请使用下一节所述的“合并方法 2：在不使用 MERGE 的情况下指定列列表”。

如果您不使用暂存表中的所有行，则使用 WHERE 子句筛选 DELETE 和 INSERT 语句，以忽略未更改的行。但是，如果暂存表中的大多数行不会参与合并，我们建议通过单独的步骤中执行 UPDATE 和 INSERT，如本节后面所述。

## 合并方法 2：在不使用 MERGE 的情况下指定列列表
<a name="merge-method-specify-column-list"></a>

使用此方法可更新目标表中的特定列，而不是覆盖所有行。此方法比前一个方法消耗的时间更长，因为它需要执行一个额外的更新步骤，并且不使用 MERGE 命令。请在满足以下所有条件时用此方法：
+ 并非要更新目标表中的所有列。
+ 暂存表中的大多数行在更新中将不会使用。

**Topics**
+ [合并方法 1：替换现有行](#merge-method-replace-existing-rows)
+ [合并方法 2：在不使用 MERGE 的情况下指定列列表](#merge-method-specify-column-list)
+ [创建临时的暂存表](merge-create-staging-table.md)
+ [替换现有行以执行合并操作](merge-replacing-existing-rows.md)
+ [通过在不使用 MERGE 的情况下指定列列表执行合并操作](merge-specify-a-column-list.md)
+ [合并示例](merge-examples.md)