Când am început să scriu o postare recentă pe blog, am vrut să fac legătura cu o postare de blog clară și concisă pe diferite tipuri de dimensiuni cu modificări lente (SCD) pentru oricine nu este familiarizat cu subiectul. Deși există o varietate de introduceri amănunțite acolo, nu am găsit una atât de clară și concisă pe cât aș vrea.

dimensiuni

Prin urmare, vă ofer propria mea ofertă, o introducere rapidă la Slowly Changing Dimensions sau SCD, într-un scenariu de stocare a datelor.

Pentru o discuție mai detaliată despre dimensiunile care se schimbă încet, aș sugera să vă uitați la postările proprii ale Kimball Group pentru tipul 1 și tipurile 2 și 3.

Ce schimbă încet dimensiunile?

Atunci când organizați un datawarehouse în scheme de stele în stil Kimball, raportați înregistrările de fapt la o înregistrare de dimensiune specifică cu atributele sale conexe. Dar dacă informațiile din dimensiune se schimbă? Acum asociați toate înregistrările de fapt cu noua valoare? Ignorați schimbarea pentru a păstra acuratețea istorică? Sau tratați faptele înainte ca dimensiunea să se schimbe diferit de cele de după?

Această decizie este cea care determină dacă dimensiunea dvs. se va schimba încet. Există mai multe tipuri diferite de SCD, în funcție de modul în care tratați schimbările primite.

Care sunt tipurile de SCD?

Foarte simplu, există 6 tipuri de dimensiuni care se schimbă lent care sunt utilizate în mod obișnuit, acestea sunt după cum urmează:

  • Tipul 0 - Dimensiune fixă
    • Nu sunt permise modificări, dimensiunea nu se schimbă niciodată
  • Tipul 1 - Fără istoric
    • Actualizați înregistrarea direct, nu există nicio înregistrare a valorilor istorice, ci doar starea actuală
  • Tipul 2 - Versiunea în rânduri
    • Urmăriți modificările ca înregistrări de versiune cu steagul curent și datele active și alte metadate
  • Tipul 3 - Coloana Valoare anterioară
    • Urmăriți modificarea la un anumit atribut, adăugați o coloană pentru a afișa valoarea anterioară, care este actualizată pe măsură ce apar modificări suplimentare
  • Tipul 4 - Tabel istoric
    • Afișați valoarea curentă în tabelul de dimensiuni, dar urmăriți toate modificările într-un tabel separat
  • Tipul 6 - SCD hibrid
    • Utilizați tehnici din tipurile SCD 1, 2 și 3 pentru a urmări schimbările

În realitate, doar tipurile 0, 1 și 2 sunt utilizate pe scară largă, celelalte fiind rezervate pentru cerințe foarte specifice. În mod confuz, nu există SCD tip 5 în definițiile convenite în mod comun.

După ce ați implementat tipul de dimensiune ales, puteți să vă îndreptați înregistrările de fapt către afacerea relevantă sau cheia surogat. Cheile surogate din aceste exemple se referă la o versiune istorică specifică a înregistrării, eliminând complexitatea îmbinării din structurile de date ulterioare.

Exemple practice

Avem o dimensiune „client” foarte simplă, cu doar 2 atribute - Numele și țara clientului:

Cu toate acestea, Bob tocmai ne-a informat că s-a mutat acum în SUA și vrem să ne actualizăm înregistrarea dimensiunii pentru a reflecta acest lucru. Putem vedea cum diferitele tipuri de SCD vor gestiona această modificare și avantajele/dezavantajele fiecărei metode.

Masa noastră rămâne aceeași. Aceasta înseamnă că rapoartele noastre existente vor continua să arate aceleași cifre, poate că este o cerință de afaceri ca fiecare client să fie întotdeauna alocat țării din care s-a înscris.

Toate tranzacțiile viitoare asociate cu Bob vor fi, de asemenea, alocate țării „Regatului Unit”.

Tabelul este actualizat pentru a reflecta noua țară a lui Bob:

Toate înregistrările de fapt asociate cu Bob vor fi acum asociate cu țara „Statele Unite”, indiferent de momentul în care au avut loc.

De multe ori dorim doar să vedem valoarea curentă a unui atribut de dimensiune - s-ar putea ca numai modificările de dimensiune care apar să fie corecții la greșeli, poate că nu există nicio cerință pentru raportarea istorică.

Pentru a accepta modificările de tip 2, trebuie să adăugăm patru coloane la tabelul nostru:

· Cheie surogat - ID-ul original nu va mai fi suficient pentru a identifica înregistrarea specifică pe care o solicităm, prin urmare, trebuie să creăm un nou ID la care se pot alătura în mod specific înregistrările de fapt.

· Flag actual - O metodă rapidă de returnare a versiunii actuale a fiecărei înregistrări

· Data de începere - Data de la care versiunea istorică specifică este activă

· Data de încheiere - Data la care este activă înregistrarea specifică a versiunii istorice

Cu aceste elemente, tabelul nostru va arăta acum ca:

Această metodă este foarte puternică - mențineți istoricul pentru întreaga înregistrare și puteți efectua cu ușurință o analiză a schimbării în timp. Cu toate acestea, vine, de asemenea, cu mai multe cheltuieli de întreținere, cerințe de stocare crescute și impacturi potențiale asupra performanței dacă este utilizat pe dimensiuni foarte mari.

Tipul 2 este cea mai comună metodă de urmărire a modificărilor în depozitele de date.

Aici, adăugăm o nouă coloană numită „Țara anterioară” pentru a urmări care a fost ultima valoare pentru atributul nostru.

Rețineți că acest lucru va furniza o singură valoare istorică pentru țară. Dacă clientul își schimbă numele, nu îl vom putea urmări fără a adăuga o nouă coloană. La fel, dacă Bob a mutat din nou țara, ar trebui fie să adăugăm coloane „Țara anterioară anterioară”, fie să pierdem faptul că a trăit odată în Regatul Unit.

Aici nu există nicio modificare a tabelului nostru existent, pur și simplu actualizăm înregistrarea ca și cum s-ar fi produs o modificare de tip 1. Cu toate acestea, menținem simultan un tabel istoric pentru a urmări aceste modificări:

Tabelul nostru de dimensiuni citește:

În timp ce tabelul nostru istoric de tip 4 este creat ca:

În funcție de cerințele dvs., puteți plasa atât ID-ul, cât și cheia surogat în înregistrarea de fapt, astfel încât să puteți optimiza performanța, menținând în același timp funcționalitatea.

Separarea datelor istorice face dimensiunile mai mici și, prin urmare, reduce complexitatea și îmbunătățește performanța, dacă majoritatea utilizărilor au nevoie doar de valoarea curentă.

Cu toate acestea, dacă aveți nevoie de valori istorice, această structură adaugă complexitate și cheltuieli generale de redundanță a datelor. În general, se presupune că sistemul va folosi tipul 1 sau tipul 2, mai degrabă decât tipul 4.

Metoda „hibridă” ia pur și simplu tipurile SCD 1, 2 și 3 și aplică toate tehnicile. Vom menține un istoric al tuturor modificărilor, actualizând simultan o coloană „valoare curentă” pe toate înregistrările.

Acest lucru vă oferă posibilitatea de a furniza un element de comparare a schimbărilor fără calcule suplimentare, menținând în același timp un istoric complet și detaliat al tuturor modificărilor din sistem.

Personal, dacă ar apărea această cerință, aș evita redundanța datelor din această coloană suplimentară și aș calcula pur și simplu valoarea curentă folosind funcția ferestrei „LAST_VALUE ()” în timpul rulării. Deși acest lucru depinde de prioritățile dvs. între stocarea datelor și performanța interogării directe.