|
21 | 21 | {{- dbtvault.prepend_generated_by() }}
|
22 | 22 |
|
23 | 23 | WITH source_data AS (
|
24 |
| - SELECT * |
25 |
| - FROM {{ ref(source_model) }} |
| 24 | + SELECT {{ dbtvault.prefix(source_cols, 'a', alias_target='source') }} |
| 25 | + FROM {{ ref(source_model) }} AS a |
| 26 | + WHERE {{ dbtvault.multikey(src_dfk, prefix='a', condition='IS NOT NULL') }} |
| 27 | + AND {{ dbtvault.multikey(src_sfk, prefix='a', condition='IS NOT NULL') }} |
26 | 28 | {%- if model.config.materialized == 'vault_insert_by_period' %}
|
27 |
| - WHERE __PERIOD_FILTER__ |
28 |
| - {% endif %} |
29 |
| - {%- set source_cte = "source_data" %} |
30 |
| -), |
31 |
| - |
32 |
| -{%- if model.config.materialized == 'vault_insert_by_rank' %} |
33 |
| -rank_col AS ( |
34 |
| - SELECT * FROM source_data |
35 |
| - WHERE __RANK_FILTER__ |
36 |
| - {%- set source_cte = "rank_col" %} |
| 29 | + AND __PERIOD_FILTER__ |
| 30 | + {%- elif model.config.materialized == 'vault_insert_by_rank' %} |
| 31 | + AND __RANK_FILTER__ |
| 32 | + {%- endif %} |
37 | 33 | ),
|
38 |
| -{% endif -%} |
39 | 34 |
|
40 |
| -{%- if load_relation(this) is none %} |
| 35 | +{%- if dbtvault.is_any_incremental() %} |
41 | 36 |
|
42 |
| -records_to_insert AS ( |
43 |
| - SELECT {{ dbtvault.alias_all(source_cols, 'e') }} |
44 |
| - FROM {{ source_cte }} AS e |
45 |
| -) |
46 |
| -{%- else %} |
47 |
| - |
48 |
| -latest_open_eff AS |
49 |
| -( |
| 37 | +{# Selecting the most recent records for each link hashkey -#} |
| 38 | +latest_records AS ( |
50 | 39 | SELECT {{ dbtvault.alias_all(source_cols, 'b') }},
|
51 | 40 | ROW_NUMBER() OVER (
|
52 |
| - PARTITION BY |
53 |
| - {%- for driving_key in dfk_cols %} |
54 |
| - {{ driving_key }}{{ ", " if not loop.last }} |
55 |
| - {%- endfor %} |
| 41 | + PARTITION BY b.{{ src_pk }} |
56 | 42 | ORDER BY b.{{ src_ldts }} DESC
|
57 |
| - ) AS row_number |
| 43 | + ) AS row_num |
58 | 44 | FROM {{ this }} AS b
|
59 |
| - WHERE TO_DATE(b.{{ src_end_date }}) = TO_DATE('9999-12-31') |
60 |
| - QUALIFY row_number = 1 |
| 45 | + QUALIFY row_num = 1 |
61 | 46 | ),
|
62 | 47 |
|
63 |
| -stage_slice AS |
64 |
| -( |
65 |
| - SELECT {{ dbtvault.alias_all(source_cols, 'stage') }} |
66 |
| - FROM {{ "rank_col" if model.config.materialized == 'vault_insert_by_rank' else "source_data" }} AS stage |
| 48 | +{# Selecting the open records of the most recent records for each link hashkey -#} |
| 49 | +latest_open AS ( |
| 50 | + SELECT {{ dbtvault.alias_all(source_cols, 'c') }} |
| 51 | + FROM latest_records AS c |
| 52 | + WHERE TO_DATE(c.{{ src_end_date }}) = TO_DATE('9999-12-31') |
67 | 53 | ),
|
68 | 54 |
|
69 |
| -new_open_records AS ( |
70 |
| - SELECT DISTINCT |
71 |
| - {{ dbtvault.alias_all(source_cols, 'stage') }} |
72 |
| - FROM stage_slice AS stage |
73 |
| - LEFT JOIN latest_open_eff AS e |
74 |
| - ON stage.{{ src_pk }} = e.{{ src_pk }} |
75 |
| - WHERE e.{{ src_pk }} IS NULL |
76 |
| - AND {{ dbtvault.multikey(src_dfk, prefix='stage', condition='IS NOT NULL') }} |
77 |
| - AND {{ dbtvault.multikey(src_sfk, prefix='stage', condition='IS NOT NULL') }} |
| 55 | +{# Selecting the closed records of the most recent records for each link hashkey -#} |
| 56 | +latest_closed AS ( |
| 57 | + SELECT {{ dbtvault.alias_all(source_cols, 'd') }} |
| 58 | + FROM latest_records AS d |
| 59 | + WHERE TO_DATE(d.{{ src_end_date }}) != TO_DATE('9999-12-31') |
78 | 60 | ),
|
79 |
| -{%- if is_auto_end_dating %} |
80 | 61 |
|
81 |
| -links_to_end_date AS ( |
82 |
| - SELECT a.* |
83 |
| - FROM latest_open_eff AS a |
84 |
| - LEFT JOIN stage_slice AS b |
85 |
| - ON {{ dbtvault.multikey(src_dfk, prefix=['a', 'b'], condition='=') }} |
86 |
| - WHERE {{ dbtvault.multikey(src_sfk, prefix='b', condition='IS NULL', operator='OR') }} |
87 |
| - OR {{ dbtvault.multikey(src_sfk, prefix=['a', 'b'], condition='<>', operator='OR') }} |
| 62 | +{# Identifying the completely new link relationships to be opened in eff sat -#} |
| 63 | +new_open_records AS ( |
| 64 | + SELECT DISTINCT |
| 65 | + {{ dbtvault.alias_all(source_cols, 'f') }} |
| 66 | + FROM source_data AS f |
| 67 | + LEFT JOIN latest_records AS lr |
| 68 | + ON f.{{ src_pk }} = lr.{{ src_pk }} |
| 69 | + WHERE lr.{{ src_pk }} IS NULL |
88 | 70 | ),
|
89 | 71 |
|
90 |
| -new_end_dated_records AS ( |
| 72 | +{# Identifying the currently closed link relationships to be reopened in eff sat -#} |
| 73 | +new_reopened_records AS ( |
91 | 74 | SELECT DISTINCT
|
92 |
| - h.{{ src_pk }}, |
93 |
| - {{ dbtvault.alias_all(fk_cols, 'g') }}, |
94 |
| - h.EFFECTIVE_FROM AS {{ src_start_date }}, h.{{ src_source }} |
95 |
| - FROM latest_open_eff AS h |
96 |
| - INNER JOIN links_to_end_date AS g |
97 |
| - ON g.{{ src_pk }} = h.{{ src_pk }} |
| 75 | + lc.{{ src_pk }}, |
| 76 | + {{ dbtvault.alias_all(fk_cols, 'lc') }}, |
| 77 | + lc.{{ src_start_date }} AS {{ src_start_date }}, |
| 78 | + g.{{ src_end_date }} AS {{ src_end_date }}, |
| 79 | + g.{{ src_eff }} AS {{ src_eff }}, |
| 80 | + g.{{ src_ldts }}, |
| 81 | + g.{{ src_source }} |
| 82 | + FROM source_data AS g |
| 83 | + INNER JOIN latest_closed lc |
| 84 | + ON g.{{ src_pk }} = lc.{{ src_pk }} |
98 | 85 | ),
|
99 | 86 |
|
100 |
| -amended_end_dated_records AS ( |
| 87 | +{%- if is_auto_end_dating %} |
| 88 | + |
| 89 | +{# Creating the closing records -#} |
| 90 | +{# Identifying the currently open relationships that need to be closed due to change in SFK(s) -#} |
| 91 | +new_closed_records AS ( |
101 | 92 | SELECT DISTINCT
|
102 |
| - a.{{ src_pk }}, |
103 |
| - {{ dbtvault.alias_all(fk_cols, 'a') }}, |
104 |
| - a.{{ src_start_date }}, |
105 |
| - stage.{{ src_eff }} AS END_DATE, stage.{{ src_eff }}, stage.{{ src_ldts }}, |
106 |
| - a.{{ src_source }} |
107 |
| - FROM new_end_dated_records AS a |
108 |
| - INNER JOIN stage_slice AS stage |
109 |
| - ON {{ dbtvault.multikey(src_dfk, prefix=['stage', 'a'], condition='=') }} |
110 |
| - WHERE {{ dbtvault.multikey(src_sfk, prefix='stage', condition='IS NOT NULL') }} |
111 |
| - AND {{ dbtvault.multikey(src_dfk, prefix='stage', condition='IS NOT NULL') }} |
| 93 | + lo.{{ src_pk }}, |
| 94 | + {{ dbtvault.alias_all(fk_cols, 'lo') }}, |
| 95 | + lo.{{ src_start_date }} AS {{ src_start_date }}, |
| 96 | + h.{{ src_eff }} AS {{ src_end_date }}, |
| 97 | + h.{{ src_eff }} AS {{ src_eff }}, |
| 98 | + h.{{ src_ldts }}, |
| 99 | + lo.{{ src_source }} |
| 100 | + FROM source_data AS h |
| 101 | + INNER JOIN latest_open AS lo |
| 102 | + ON {{ dbtvault.multikey(src_dfk, prefix=['lo', 'h'], condition='=') }} |
| 103 | + WHERE ({{ dbtvault.multikey(src_sfk, prefix=['lo', 'h'], condition='<>', operator='OR') }}) |
112 | 104 | ),
|
| 105 | + |
| 106 | +{#- if is_auto_end_dating -#} |
113 | 107 | {%- endif %}
|
114 | 108 |
|
115 | 109 | records_to_insert AS (
|
116 | 110 | SELECT * FROM new_open_records
|
| 111 | + UNION |
| 112 | + SELECT * FROM new_reopened_records |
117 | 113 | {%- if is_auto_end_dating %}
|
118 | 114 | UNION
|
119 |
| - SELECT * FROM amended_end_dated_records |
| 115 | + SELECT * FROM new_closed_records |
120 | 116 | {%- endif %}
|
121 | 117 | )
|
| 118 | + |
| 119 | +{%- else %} |
| 120 | + |
| 121 | +records_to_insert AS ( |
| 122 | + SELECT {{ dbtvault.alias_all(source_cols, 'i') }} |
| 123 | + FROM source_data AS i |
| 124 | +) |
| 125 | + |
| 126 | +{#- if not dbtvault.is_any_incremental() -#} |
122 | 127 | {%- endif %}
|
123 | 128 |
|
124 | 129 | SELECT * FROM records_to_insert
|
|
0 commit comments