在红移中插入

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 的组合是唯一键。但是,您可以修改 usingwhere 子句以适合您的情况。

以上是关于在红移中插入的主要内容,如果未能解决你的问题,请参考以下文章

在红移中评估的顺序是啥

在红移中具有 DISTINCT 的 listagg

数据值“0”在红移中有无效格式错误

如何在红移中获取过去 X 周的数据?

如何获得最近 x 周数据的不同计数,但在红移中按周分组?

在红移中计算一年中的周数作为excel中的weeknum()