【问题标题】:How to Replace/Overwrite only certain values in Snowflake Table?如何仅替换/覆盖雪花表中的某些值?
【发布时间】:2021-07-10 01:24:53
【问题描述】:

我有一个 Snowflake SQL 命令,格式如下:

CREATE TASK REPLACE_CERTAIN_ROWS
WAREHOUSE=<MY_WAREHOUSE>
SCHEDULE='USING CRON 0 5,17 * * * UTC'
AS
insert overwrite into <MY_SCHEMA>.<MY_TABLE>(FIELD1,FIELD2)
<MY_SQL>

我的桌子看起来像:

FIELD1|FIELD2
ABC,REPLACE
DEF,REPLACE
GHI,DONTREPLACE
JKL,DONTREPLACE

我如何改变我的 Snowflake 以仅覆盖 FIELD2="REPLACE" 行,而不是替换整个表?我是否必须首先有一个删除这些行的命令,或者有没有办法更即时地做到这一点?我知道每个 Snowflake 任务只能执行一个命令,因此希望避免管理依赖任务并在同一个任务/命令中完成所有操作。

期望的结果:

FIELD1|FIELD2
GHI,DONTREPLACE <- remained
JKL,DONTREPLACE <- remained
MNO,REPLACE <- was replaced
PQR,REPLACE <- was replaced

【问题讨论】:

    标签: sql sql-insert snowflake-cloud-data-platform overwrite snowflake-schema


    【解决方案1】:

    UPDATE 是这样做的正常方式:

    UPDATE <MYDB>.<MY_SCHEMA>.<MY_TABLE> SET field1 = <new value> WHERE field2 = 'REPLACE';
    

    但如果您尝试从 TABLE/STREAM 中驱动它,那么 MERGE 是您想要的更多。

    【讨论】:

    • 谢谢您(对于您所有的 SO SQL 答案)。你能把它放在我发布的第一个 CREATE TASK 块的上下文中吗?我在如何使用 MERGE/UPDATE 构建现有任务时遇到问题
    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 2020-05-18
    • 2022-07-18
    • 2017-12-08
    • 2015-04-24
    • 2019-12-25
    相关资源
    最近更新 更多