1+ DELETE FROM catalog- name .schema - name .table - name
2+ WHERE
3+ load_date >= 20250201 ,
4+ AND load_src = ' SOURCE_FOO'
5+ ;
6+ UPDATE catalog- name .schema - name .table - name
7+ SET end_dt = ' 9999-12-31'
8+ , delete_f = 0
9+ , updt_load_src = ' SOURCE_FOO'
10+ , updt_load_id = 1
11+ , updt_load_date = to_timestamp(' 20250201' , ' yyyyMMdd' )
12+ WHERE
13+ end_dt = DATEADD(DAY, - 1 , to_timestamp(' 20250201' , ' yyyyMMdd' ))
14+ AND updt_load_src = ' SOURCE_FOO'
15+ AND updt_load_date >= to_timestamp(' 20250201' , ' yyyyMMdd' )
16+ ;
17+ MERGE INTO catalog- name .schema - name .table - name AS target
18+ USING (
19+ WITH change_query AS (
20+ SELECT
21+ src.* ,
22+ CASE WHEN tgt .pk_col IS NULL THEN 99
23+ WHEN hash(src .col01 , src .col02 ) <> hash(tgt .col01 , tgt .col02 ) THEN 1
24+ ELSE 0 END AS data_change
25+ FROM ( SELECT * FROM catalog- name .schema - name .source - name ) AS src
26+ LEFT JOIN catalog- name .schema - name.{p_table_name} AS tgt
27+ ON tgt .end_dt = ' 9999-12-31'
28+ AND tgt .col01 = src .col01
29+ AND tgt .col02 = src .col02
30+ )
31+ SELECT pk_col AS merge_pk_col, * FROM change_query WHERE data_change == 1
32+ UNION ALL
33+ SELECT null AS merge_pk_col, * FROM change_query WHERE data_change = (1 , 99 )
34+ ) AS source
35+ ON target .pk_col = source .merge_pk_col
36+ WHEN MATCHED AND source .data_change = 1
37+ THEN UPDATE
38+ SET target .col01 = source .col01
39+ ,target .col02 = source .col02
40+ , target .end_dt = DATEADD(DAY, - 1 , to_timestamp(' 20250201' , ' yyyyMMdd' ))
41+ , target .updt_load_src = ' SOURCE_FOO'
42+ , target .updt_load_id = 1
43+ , target .updt_load_date = to_timestamp(' 20250201' , ' yyyyMMdd' )
44+ WHEN NOT MATCHED AND source .data_change IN (1 , 99 )
45+ THEN INSERT
46+ (
47+ col01, col02, pk_col, start_date, end_date, delete_f, load_src, load_id, load_date, updt_load_src, updt_load_id, updt_load_date
48+ )
49+ VALUES (
50+ source .col01
51+ ,source .col02
52+ ,source .pk_col
53+ , to_timestamp(' 20250201' , ' yyyyMMdd' )
54+ , to_timestamp(' 9999-12-31' , ' yyyy-MM-dd' )
55+ , 0
56+ , ' SOURCE_FOO'
57+ , 1
58+ , 20250201
59+ , ' SOURCE_FOO'
60+ , 1
61+ , to_timestamp(' 20250201' , ' yyyyMMdd' )
62+ )
63+ WHEN NOT MATCHED BY SOURCE
64+ AND target .end_dt = to_timestamp(' 9999-12-31' , ' yyyy-MM-dd' )
65+ AND target .prcs_nm = ' {p_process_name}'
66+ THEN UPDATE
67+ SET target .delete_f = 1
68+ , target .end_dt = DATEADD(DAY, - 1 , to_timestamp(' 20250201' , ' yyyyMMdd' ))
69+ , target .updt_load_src = ' SOURCE_FOO'
70+ , target .updt_load_id = 1
71+ , target .updt_load_date = to_timestamp(' 20250201' , ' yyyyMMdd' )
72+ ;
0 commit comments