SnowFlake MERGE 更新/插入所有列

Gad*_*dam 10 sql merge upsert snowflake-cloud-data-platform

雪花是否支持使用类似UPDATE *or的语法更新/插入所有列INSERT *

 MERGE INTO events 
 USING updates 
      ON events.eventId = updates.eventId
 WHEN MATCHED THEN 
      UPDATE *
 WHEN NOT MATCHED THEN 
       INSERT *  
Run Code Online (Sandbox Code Playgroud)

类似于 Databricks 的做法:https ://docs.databricks.com/spark/latest/spark-sql/language-manual/delta-merge-into.html

或者我们是否必须列出每一列及其值?

当我尝试上述操作时出现错误

语法错误...意外的“*”。

并且文档没有多大帮助:https://docs.snowflake.com/en/sql-reference/sql/merge.html

谢谢,

Luk*_*zda 11

它们UPDATE SET */INSERT *是 SQL 语言扩展(未在 SQL 标准中定义)。

Snowflake 不支持这种语法:

合并

matchedClause ::=
  WHEN MATCHED [ AND <case_predicate> ] 
  THEN { UPDATE SET <col_name> = <expr> [ , <col_name2> = <expr2> ...] 
         | DELETE }[...]

notMatchedClause ::=
  WHEN NOT MATCHED [ AND <case_predicate> ] 
  THEN INSERT [ ( <col_name> [ , ... ] ) ] VALUES ( <expr> [ , ... ] )
Run Code Online (Sandbox Code Playgroud)

您可以在以下位置投票支持此类功能: https: //community.snowflake.com/s/ideas

已经有一个项目叫做:“隐式更新和插入支持 MERGE INTO”