#oracle #snowflake-cloud-data-platform
Вопрос:
Есть ли у нас в oracle соответствующая исходная и целевая таблицы
У меня есть три условия:
- когда источник и цель совпадают, затем обновите при условии
- Когда в источнике появляются новые данные, которые не являются целевыми, добавьте запись.
- Когда данные находятся не в источнике, а в цели. Затем обновите флаг в целевой таблице.
Пожалуйста, обратите внимание: Исходная таблица обновляется каждый день.
Я могу выполнить шаг 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. Я понимаю общую цель, я спрашивал о цели операции, так как этого не было в вопросе. Есть и другие решения, но я хотел сосредоточиться на конкретном случае использования.