更新和插入新数据
您可以使用 MERGE 命令高效地向现有表中添加新数据。执行合并操作,方法是创建暂存表,然后使用本节中描述的方法之一从暂存表更新目标表。有关 MERGE 命令的更多信息,请参阅MERGE。
合并示例使用名为 TICKIT 数据集的 Amazon Redshift 示例数据集。作为先决条件,您可以按照开始使用常见数据库任务中提供的说明设置 TICKIT 表和数据。有关示例数据集的更多详细信息可在示例数据库中找到。
合并方法 1:替换现有行
如果您要覆盖目标表中的所有列,执行合并的最快方法是替换现有行。这将通过使用内部联接删除将要更新的行,从而仅需扫描目标表一次。在删除某些行后,通过从暂存表执行单个插入操作即可使用新行来替换它们。
请在满足以下所有条件时用此方法:
-
您的目标表和暂存表包含相同的列。
-
您要将目标表列中的所有数据替换为所有的暂存表列。
-
您将在合并操作中使用暂存表中的所有行。
如果未满足以上任一条件,请使用下一节所述的“合并方法 2:在不使用 MERGE 的情况下指定列列表”。
如果您不使用暂存表中的所有行,则使用 WHERE 子句筛选 DELETE 和 INSERT 语句,以忽略未更改的行。但是,如果暂存表中的大多数行不会参与合并,我们建议通过单独的步骤中执行 UPDATE 和 INSERT,如本节后面所述。
合并方法 2:在不使用 MERGE 的情况下指定列列表
使用此方法可更新目标表中的特定列,而不是覆盖所有行。此方法比前一个方法消耗的时间更长,因为它需要执行一个额外的更新步骤,并且不使用 MERGE 命令。请在满足以下所有条件时用此方法:
-
并非要更新目标表中的所有列。
-
暂存表中的大多数行在更新中将不会使用。