如何仅替换/覆盖雪花表中的某些值?

时间:2021-04-15 01:49:00

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

我有一个如下形式的 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

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

预期结果:

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

1 个答案:

答案 0 :(得分:0)

UPDATE 是执行此操作的正常方法:

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

但如果您试图从 TABLE/STREAM 中驱动它,那么 MERGE 更符合您的需求。