All Downloads are FREE. Search and download functionalities are using the official Maven repository.

templates.write-strategies.spark.upsert_by_key_and_timestamp.j2 Maven / Gradle / Ivy


CREATE OR REPLACE TEMPORARY VIEW SL_INCOMING AS {{ selectStatement }};

{% if strategyOn == 'TARGET' %}

MERGE INTO  {{ tableFullName }} SL_EXISTING USING SL_INCOMING ON ( {{ strategyKeyJoinCondition }})
WHEN MATCHED AND SL_INCOMING.{{ strategyTimestamp }} > SL_EXISTING.{{ strategyTimestamp }} THEN  UPDATE {{ tableUpdateSetExpression }}
WHEN NOT MATCHED THEN {{ tableInsert }}

{% else %} {# strategyOn == 'SOURCE_AND_TARGET' #}

CREATE OR REPLACE TEMPORARY VIEW SL_VIEW_WITH_ROWNUM AS
SELECT  *, ROW_NUMBER() OVER (PARTITION BY {{ strategyKeyCsv }} ORDER BY {{ strategyTimestamp }} DESC) AS SL_SEQ
FROM SL_INCOMING;

CREATE OR REPLACE TEMPORARY VIEW SL_DEDUP AS SELECT {{ tableColumnsCsv }} 
FROM SL_VIEW_WITH_ROWNUM 
WHERE SL_SEQ = 1;

MERGE INTO {{ tableFullName }} SL_EXISTING 
USING SL_DEDUP AS SL_INCOMING ON ( {{ strategyKeyJoinCondition }})
WHEN MATCHED AND SL_INCOMING.{{ strategyTimestamp }} > SL_EXISTING.{{ strategyTimestamp }} THEN  UPDATE {{ tableUpdateSetExpression }}
WHEN NOT MATCHED THEN {{ tableInsert }}


{%  endif %}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy