繁体   English   中英

Snowfalke sql 如果存在则更新,否则插入

[英]Snowfalke sql update if exists else insert

我看过其他问题,但似乎雪花不支持 sql 中的 if/else,至少不是其他 sql 服务器支持它的方式。

有些人建议使用 javascript,但如果可以的话,我想避免这种情况。

我正在尝试使用雪花 python 库将一些数据插入到表中,如果它已经存在,那么我想更新数据,我查看了合并,但它似乎不适合我,因为我的数据不是表

这就是我到目前为止没有工作的东西

f"""BEGIN
                IF (EXISTS (SELECT * FROM {self.okr_table} WHERE kpi=TRUE AND Month(month)=MONTH(current_date()) AND year(month)=YEAR(current_date())))
                THEN 
                UPDATE {self.okr_table} SET [DATA] = {json.dumps(self.data)} WHERE kpi=TRUE AND Month(month)=MONTH(current_date()) AND year(month)=YEAR(current_date()))
                ELSE 
                INSERT INTO {self.okr_table} (month, data, kpi) SELECT current_date(),parse_json('{json.dumps(self.data)}'), true;
                END"""

要执行 INSERT/UPDATE,最好使用单个 MERGE 语句

我看过合并,但它似乎不适合我,因为我的数据不是表格

这不是问题,因为源可能是表或子查询:

MERGE INTO {self.okr_table} 
USING (SELECT PARSE_JSON({json.dumps(self.data)} AS data
             , MONTH(current_date()) AS month
             , YEAR(current_date()) AS year
      ) s
  ON  {self.okr_table}.KPI
  AND MONTH({self.okr_table}.month) = s.month
  AND YEAR({self.okr_table}.month) = s.year
WHEN MATCHED THEN UPDATE
WHEN NOT MATCHED THEN INSER ...;

IF/ELSE 分支在 Snowflake 中起作用:

BEGIN
  IF (EXISTS (...)) THEN
      UPDATE ... ;
  ELSE
      INSERT ... ;
  END IF;
END;

请注意; 在每个语句之后, END IF和条件周围的括号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM