更新和插入新数据 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

更新和插入新数据

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

合并示例使用名为 TICKIT 数据集的 Amazon Redshift 示例数据集。作为先决条件,您可以按照开始使用常见数据库任务中提供的说明设置 TICKIT 表和数据。有关示例数据集的更多详细信息可在示例数据库中找到。

合并方法 1:替换现有行

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

请在满足以下所有条件时用此方法:

  • 您的目标表和暂存表包含相同的列。

  • 您要将目标表列中的所有数据替换为所有的暂存表列。

  • 您将在合并操作中使用暂存表中的所有行。

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

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

合并方法 2:在不使用 MERGE 的情况下指定列列表

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

  • 并非要更新目标表中的所有列。

  • 暂存表中的大多数行在更新中将不会使用。