объединение в целевой таблице путем сравнения исходной и целевой таблиц

#oracle #snowflake-cloud-data-platform

Вопрос:

Есть ли у нас в oracle соответствующая исходная и целевая таблицы

У меня есть три условия:

  1. когда источник и цель совпадают, затем обновите при условии
  2. Когда в источнике появляются новые данные, которые не являются целевыми, добавьте запись.
  3. Когда данные находятся не в источнике, а в цели. Затем обновите флаг в целевой таблице.

Пожалуйста, обратите внимание: Исходная таблица обновляется каждый день.

Я могу выполнить шаг 1 и шаг 2 в слиянии, как показано ниже

 merge into target as t using Source as S
      On t.pk1 = s.pk1 and t1.pk2 = s.pk2
when matched and t.normalKey <> s.NormalKey --Step 1
    then update t.normalKey = s.NormalKey
when not matched 
    then insert (t.field) values (s.field) --Step 2
Step 3-- ?
 

В sql server есть способ справиться с этим. как показано ниже
Я пытаюсь придумать такой же способ использования предложения » By » в Snowflake.

Ниже приведен пример, который мы делаем в sqlserver.

 MERGE <target_table> [AS TARGET]
USING <table_source> [AS SOURCE]
ON <search_condition>
[WHEN MATCHED 
   THEN <merge_matched> ]
[WHEN NOT MATCHED [BY TARGET]
   THEN <merge_not_matched> ]
[WHEN NOT MATCHED BY SOURCE
   THEN <merge_matched> ];
 

Моим окончательным решением будет использование другого оператора слияния/обновления.
Сначала объедините, чтобы выполнить шаги 1 и 2.

и еще одно обновление только для обработки шага 3.

Или у нас есть лучший способ.

Комментарии:

1. Связан ли этот запрос с sql Snowflake?

2. да, в основном я пробую этот SnowSql

3. Какова цель обновления целевой таблицы, если данных нет в источнике? И можете ли вы предоставить более подробную информацию об исходной таблице? Это только изменение данных или всегда полное обновление данных. Как это связано с целевой таблицей? Слияние снежинок ведет себя не так, как SQL Server. Он используется для ОБЪЕДИНЕНИЯ исходного кода в целевой, в то время как SQL Server больше посвящен сравнению 2 таблиц и применению логики. Таким образом, в Snowflake нет опции «ПО ИСТОЧНИКУ» или «ПО ЦЕЛИ».

4. @MikeWalton What is the purpose of updating the target table if the data isn't in the source? And can you provide more information on the source table? Распространенный сценарий — «мягкое удаление» и установка флага is_deleted . Еще один параметр-настройка end date (при обработке периодов дат). Целевая таблица может содержать столбцы метаданных , поэтому ОБНОВЛЕНИЕ имеет значение, даже если источник не содержит этой строки.

5. Я понимаю общую цель, я спрашивал о цели операции, так как этого не было в вопросе. Есть и другие решения, но я хотел сосредоточиться на конкретном случае использования.