La semantica delle diverse tecniche SCD2

La bellezza delle diverse tecniche SCD2

Come piccole differenze possono avere un grande impatto

Foto di Brad Starkey su Unsplash

Recentemente, ho riflettuto molto sul modellamento dimensionale, in particolare su come rappresentiamo diversi tipi di storia nel magazzino / lakehouse. Ci sono molti articoli che descrivono come costruire una tabella SCD2 in molti linguaggi e piattaforme. Tuttavia, voglio concentrarmi su qualcosa di più sfumato e meno discusso comunemente: la semantica di SCD2 e come diverse scelte di progettazione hanno conseguenze significative sui casi d’uso.

I due principali argomenti che voglio trattare sono:

  1. Le date che scegli di versionare riga per riga le tue dimensioni contano molto. La scelta non dovrebbe mai essere arbitraria e i casi d’uso più comuni dovrebbero essere i primi a venire in mente nel tuo design.
  2. Come versioni riga determineranno i pattern di accesso alle tue tabelle. In certa misura, questo è strettamente ergonomia, ma arguirei che l’ergonomia è un aspetto importante della qualità dei dati; rendere facile per gli utenti fare la cosa giusta dovrebbe essere il nostro obiettivo come progettisti di modelli di dati.

Scelta delle date di riferimento

Il modello più comune per creare una tabella SCD2 consiste nell’utilizzare una data o un timestamp nei dati. Una volta stabilito che una riga ha cambiato significativamente, sia attraverso il confronto diretto delle colonne che la comparazione dei valori di hash, dovrai stabilire le date per “ritirare” i record esistenti e inserire nuovi record.

Ma quale data utilizzeremo? Per molti tipi di dati, potremo scegliere tra tre opzioni:

  • Estrarre i timestamp
  • Timestamp del sistema di origine
  • Timestamp aziendali (entità / evento)

Scopriamoli nel dettaglio.

Estrarre i timestamp

Questa metodologia considera, “Come apparivano i dati grezzi quando li abbiamo catturati.” La fonte di verità è il tuo magazzino e i processi che lo caricano, piuttosto che gli attributi essenziali dei dati stessi.

Considera l’esempio seguente:

Da questo record, genereremmo il seguente record SCD2 (omittendo alcuni campi di metadati come chiave surrogate, hash, timestamp di inserimento delle dimensioni, ecc. per leggibilità):