— Persist update scripts for table ** tbl_name **
!set variable_substitution=true
USE ROLE TALEND_ETL;
USE DATABASE EDW_&{database_name};
USE WAREHOUSE TALEND_ETL_WH;
— tbl_name PERSIST TABLE UPDATER
— Clear out the old table from yesterday
DROP TABLE IF EXISTS PERSIST.”tbl_name”;
— Clone the current table to _OLD
CREATE OR REPLACE TABLE PERSIST.”tbl_name” CLONE PERSIST.”tbl_name”;
— Sweep #1: Update rows where the hash is unchanged and insert rows where the hash doesn’t match
MERGE INTO PERSIST.tbl_name T
USING (
select staging.hash_diff(array_construct(
sedol,CLASS_FINANCIAL_INSTRUMENT,EXCLUDE_MIFIDII_REPORTING,IS_PAIF,
IS_LEVERAGED_FINANCIAL_INSTRUMENT,IS_PRIIP,OPTION_TYPE,
NOTIONAL_CURRENCY_1,NOTIONAL_CURRENCY_2,OPTION_EXERCISE_STYLE,
MATURITY_DATE,EXPIRY_DATE,DELIVERY_TYPE,PRICE_MULTIPLIER,STRIKE_PRICE,
STRIKE_PRICE_CURRENCY,IS_COMMODITY_DERIVATIVE
)) as tracking_hash, *
from landing.tbl_name
) S
ON T.tracking_hash = S.tracking_hash
AND T.sedol = S.sedol
AND T.valid_to_date = to_date(‘9999-12-31’)
WHEN MATCHED THEN UPDATE SET
t.sedol = s.sedol, t.CLASS_FINANCIAL_INSTRUMENT = s.CLASS_FINANCIAL_INSTRUMENT,
t.EXCLUDE_MIFIDII_REPORTING = s.EXCLUDE_MIFIDII_REPORTING,
t.IS_PAIF = s.IS_PAIF, t.IS_LEVERAGED_FINANCIAL_INSTRUMENT = s.IS_LEVERAGED_FINANCIAL_INSTRUMENT,
t.IS_PRIIP = s.IS_PRIIP, t.OPTION_TYPE = s.OPTION_TYPE,
t.NOTIONAL_CURRENCY_1 = s.NOTIONAL_CURRENCY_1, t.NOTIONAL_CURRENCY_2 = s.NOTIONAL_CURRENCY_2,
t.OPTION_EXERCISE_STYLE = s.OPTION_EXERCISE_STYLE, t.MATURITY_DATE = s.MATURITY_DATE,
t.EXPIRY_DATE = s.EXPIRY_DATE, t.DELIVERY_TYPE = s.DELIVERY_TYPE,
t.PRICE_MULTIPLIER = s.PRICE_MULTIPLIER, t.STRIKE_PRICE = s.STRIKE_PRICE,
t.STRIKE_PRICE_CURRENCY = s.STRIKE_PRICE_CURRENCY,
t.IS_COMMODITY_DERIVATIVE = s.IS_COMMODITY_DERIVATIVE,
t.META_EXTRACT_DATE = s.META_EXTRACT_DATE, t.META_EXTRACT_TIME = s.META_EXTRACT_TIME,
t.META_SOURCE = s.META_SOURCE
WHEN NOT MATCHED THEN INSERT(
tracking_hash, sedol, CLASS_FINANCIAL_INSTRUMENT,EXCLUDE_MIFIDII_REPORTING,IS_PAIF,
IS_LEVERAGED_FINANCIAL_INSTRUMENT,IS_PRIIP,OPTION_TYPE,
NOTIONAL_CURRENCY_1,NOTIONAL_CURRENCY_2,OPTION_EXERCISE_STYLE,
MATURITY_DATE,EXPIRY_DATE,DELIVERY_TYPE,PRICE_MULTIPLIER,STRIKE_PRICE,
STRIKE_PRICE_CURRENCY,IS_COMMODITY_DERIVATIVE, valid_from_date, valid_to_date,
current_record_yn,
meta_extract_date, meta_extract_time, meta_source
)
VALUES(
S.tracking_hash, S.sedol, S.CLASS_FINANCIAL_INSTRUMENT,S.EXCLUDE_MIFIDII_REPORTING,S.IS_PAIF,
S.IS_LEVERAGED_FINANCIAL_INSTRUMENT,S.IS_PRIIP,S.OPTION_TYPE,
S.NOTIONAL_CURRENCY_1,S.NOTIONAL_CURRENCY_2,S.OPTION_EXERCISE_STYLE, S.MATURITY_DATE,S.EXPIRY_DATE,S.DELIVERY_TYPE,S.PRICE_MULTIPLIER,S.STRIKE_PRICE, S.STRIKE_PRICE_CURRENCY,S.IS_COMMODITY_DERIVATIVE,
dateadd(day,-1,to_date(S.META_EXTRACT_DATE)), to_date(‘9999-12-31’),
‘Y’,
S.meta_extract_date, S.meta_extract_time, S.meta_source
);
— Sweep #2: Update (expire) rows where we’ve inserted a replacement row
update PERSIST.tbl_name T
set T.valid_to_date = dateadd(day,-2,to_date(S.META_EXTRACT_DATE)),
T.current_record_yn = ‘N’
from (
select staging.hash_diff(array_construct(
sedol,CLASS_FINANCIAL_INSTRUMENT,EXCLUDE_MIFIDII_REPORTING,IS_PAIF,
IS_LEVERAGED_FINANCIAL_INSTRUMENT,IS_PRIIP,OPTION_TYPE,
NOTIONAL_CURRENCY_1,NOTIONAL_CURRENCY_2,OPTION_EXERCISE_STYLE,
MATURITY_DATE,EXPIRY_DATE,DELIVERY_TYPE,PRICE_MULTIPLIER,STRIKE_PRICE,
STRIKE_PRICE_CURRENCY,IS_COMMODITY_DERIVATIVE
)) as tracking_hash, sedol, meta_extract_date
from landing.tbl_name
) S
where t.sedol = s.sedol
and t.valid_to_date = to_date(‘9999-12-31’)
and t.tracking_hash <> s.tracking_hash;