#sql #merge #snowflake-cloud-data-platform #upsert
Вопрос:
Поддерживает ли snowflake обновление/вставку всех столбцов с синтаксисом, подобным UPDATE *
или INSERT *
MERGE INTO events
USING updates
ON events.eventId = updates.eventId
WHEN MATCHED THEN
UPDATE *
WHEN NOT MATCHED THEN
INSERT *
аналогично тому, как это делает 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
Спасибо,
Комментарии:
1. Я довольно новичок в Snowflake, но я знаю, что он стремится эмулировать синтаксис Postgres, хотя в Postgres нет такого
MERGE
, как в Sql Server. В любом случае, мне кажется, в документации довольно ясно, что вам понадобитсяSET
предложение для каждого столбца, как того требуют Postgres и Sql Server. Это классная функция, которую предлагает Databricks, но я впервые вижу такой синтаксис.
Ответ №1:
UPDATE SET */INSERT *
Это расширения языка SQL(не определенные в стандарте SQL).
Снежинка не поддерживает такой синтаксис:
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> [ , ... ] )
Вы можете проголосовать за такую функцию по адресу: https://community.snowflake.com/s/ideas
Уже есть пункт под названием: «неявное обновление и поддержка вставки для СЛИЯНИЯ В»