在红移中插入
Posted
技术标签:
【中文标题】在红移中插入【英文标题】:Upsert in redshift 【发布时间】:2016-08-05 05:24:51 【问题描述】:我有一个 DW 表,我正在向其中插入临时表中的数据。 DW 表包含 5 列,我实质上是在从 staging 表中选择时检查 DW 表中是否已经存在所有 5 列的组合,如果存在,那么我不进行插入(或更新)并跳过该行(因为它已经存在)。
另一方面,如果存在任何没有 5 列组合的行,那么我进行插入。
有没有办法使用 upsert 实现这一点。因为我在这里没有做任何更新操作(仅插入和删除(即忽略插入))。我不确定 upsert 是否是正确的选择。
【问题讨论】:
【参考方案1】:Redshift 中没有UPSERT
这样的东西,请参阅他们的documentation。如果您打算仅将行加载到尚未包含的表中,那么这应该可以解决问题:
insert into target_table
select
*
from
source_table
left join
target_table using(col1, col2, col3, col4, col5)
where
target_table.col1 is null
;
【讨论】:
请问如何处理多个唯一键? @xbeta 你能解释一下你的意思吗,即你想插入哪些行以及你想忽略哪些行?我上面的示例假设col1
-col5
的组合是唯一键。但是,您可以修改 using
和 where
子句以适合您的情况。以上是关于在红移中插入的主要内容,如果未能解决你的问题,请参考以下文章