雪花 SQL 如果存在则更新,否则插入

3
我看了其他问题,似乎雪花不支持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"""
1个回答

6

为了执行INSERT/UPDATE操作,最好使用单个MERGE语句。

我看过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 ...;

Snowflake中可以使用IF/ELSE分支语句:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接