You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake SQL实现存在更新不存在插入(upsert)无JS方案

Snowflake 单条数据Upsert实现方案
  • 原代码运行失败的核心原因:Snowflake 普通SQL执行上下文不支持独立的IF/ELSE流控制语句,这类分支语法仅能在Snowflake Scripting块、存储过程、自定义函数内部使用,无法直接作为单条查询提交执行,和SQL Server的语法支持逻辑存在明确差异。
  • 你对MERGE语法的适用场景存在误解:MERGE的源数据集不需要是提前存储数据的物理表,完全支持通过常量、表达式构造虚拟源表,刚好适配你当前单条数据写入、存在即更新/不存在即插入的需求,不需要引入JavaScript存储过程。

可直接运行的实现代码

用单条MERGE语句即可完成需求,原子性更好、性能更高,适配你当前Python拼接SQL的场景:

MERGE INTO {self.okr_table} target
USING (
    SELECT
        CURRENT_DATE() AS op_month,
        PARSE_JSON('{json.dumps(self.data)}') AS op_data,
        TRUE AS op_kpi_flag
) source
ON
    target.kpi = source.op_kpi_flag
    AND MONTH(target.month) = MONTH(source.op_month)
    AND YEAR(target.month) = YEAR(source.op_month)
WHEN MATCHED THEN
    UPDATE SET target.DATA = source.op_data
WHEN NOT MATCHED THEN
    INSERT (month, data, kpi)
    VALUES (source.op_month, source.op_data, source.op_kpi_flag);

注意:直接拼接JSON字符串到SQL中时,需要确保JSON内的单引号已做转义,避免触发语法错误;优先使用Snowflake Python连接器的参数化传值能力传入JSON内容,安全性更高,不需要手动处理转义逻辑。

内容的提问来源于stack exchange,提问作者The Y.c

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:15:47