[英]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.