Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

更新和插入新数据

您可以使用暂存表中的更新和插入的组合高效地将新数据添加到现有表。尽管 Amazon Redshift 不支持使用单个 mergeupsert 命令从单个数据源更新表,但您可以创建一个暂存表,然后使用本节中所述的方法之一从暂存表更新目标表,从而执行合并操作。

注意

您应该在单个事务中运行整个合并操作(创建和删除临时的暂存表的操作除外),以便让事务在任何步骤失败时回滚。使用单个事务还将减少提交次数,从而节省时间和资源。

合并方法 1:替换现有行

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

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

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

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

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

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

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

合并方法 2:指定列列表

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

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

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