From fad0deb65048d8bb92de1b5d8782d568551c076c Mon Sep 17 00:00:00 2001 From: Eric Laurello Date: Thu, 22 May 2025 16:53:37 -0400 Subject: [PATCH] fix contract events PK --- .../gold/core/core__fact_contract_events.sql | 4 +--- models/silver/core/silver__contract_events.sql | 18 ++++++------------ 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/models/gold/core/core__fact_contract_events.sql b/models/gold/core/core__fact_contract_events.sql index f950692..720ee5f 100644 --- a/models/gold/core/core__fact_contract_events.sql +++ b/models/gold/core/core__fact_contract_events.sql @@ -24,9 +24,7 @@ SELECT DATA, data_decoded, contract_event_xdr, - {{ dbt_utils.generate_surrogate_key( - ['transaction_hash','_event_order'] - ) }} AS fact_contract_events_id, + contract_events_id AS fact_contract_events_id, SYSDATE() AS inserted_timestamp, SYSDATE() AS modified_timestamp FROM diff --git a/models/silver/core/silver__contract_events.sql b/models/silver/core/silver__contract_events.sql index e1cfb15..62c942a 100644 --- a/models/silver/core/silver__contract_events.sql +++ b/models/silver/core/silver__contract_events.sql @@ -74,13 +74,13 @@ WITH pre_final AS ( {% if is_incremental() %} WHERE - partition_gte_id >= '{{ max_part }}' - AND _inserted_timestamp > '{{ max_is }}' + partition_gte_id >= '2025-05-01' + AND _inserted_timestamp > '2025-05-18' {% endif %} -{# this is intentionally a rank and not a row_num due to no true PK on the table #} -qualify RANK() over ( - PARTITION BY transaction_hash +qualify ROW_NUMBER() over ( + PARTITION BY transaction_hash, + contract_event_XDR ORDER BY batch_insert_ts DESC, _inserted_timestamp DESC @@ -106,15 +106,9 @@ SELECT batch_id, batch_run_date, batch_insert_ts, - -- this isn't the order they were executed in but just a random rank to get a PK - ROW_NUMBER() over ( - PARTITION BY transaction_hash - ORDER BY - SYSDATE() - ) AS _event_order, _inserted_timestamp, {{ dbt_utils.generate_surrogate_key( - ['transaction_hash','_event_order'] + ['transaction_hash','contract_event_xdr'] ) }} AS contract_events_id, SYSDATE() AS inserted_timestamp, SYSDATE() AS modified_timestamp,