Medallion-arkkitehtuuri

Kirjoittanut Samu Lahdenperä · Julkaistu

Medallion-arkkitehtuuri on apuväline datan jalostamiseen tietovarastointiarkkitehtuurissa: se jakaa datan kulun kolmeen kerrokseen — Bronze, Silver ja Gold — joissa data muuttuu joka tasolla vähemmän raa'aksi ja enemmän liiketoiminnan käyttöön valmiiksi. Tällä sivulla käydään läpi mistä malli tulee, mitä se tarkoittaa, miksi se kannattaa ottaa käyttöön, missä sitä käytetään, miten se rakennetaan käytännössä ja milloin se on ylimitoitettu ratkaisu.

Mitä Medallion-arkkitehtuuri on?

Medallion-arkkitehtuurin keksi Databricks osana lakehouse-alustaansa 2020-luvun alussa, ja yhtiö on sittemmin popularisoinut mallin useissa julkaisuissaan. Nimi tulee kolmesta mitalimetallista: Bronze on lähtöpiste, Silver on välivaihe, Gold on lopputulos — sama logiikka kuin urheilukilpailun mitaleissa, joissa arvo kasvaa kerroksittain. Databricks kutsuu mallia myös "multi-hop-arkkitehtuuriksi" (multi-hop architecture), koska data hyppää kerroksesta toiseen aina yhden muunnosaskeleen verran kerrallaan sen sijaan että raakadata muunnettaisiin suoraan raportointivalmiiksi yhdellä massiivisella ETL-ajolla. Malli on levinnyt Databricksin ulkopuolelle nopeasti: Microsoft on ottanut saman kerrosajattelun käyttöön Fabricin OneLake-arkkitehtuurissa, ja se on yleistynyt yleiskielenä puhuttaessa tietovaraston tasoista alustasta riippumatta.

Käytännössä Medallion-arkkitehtuuri on kolme kerrosta samaa dataa, jokainen jalostusasteeltaan edellistä pidemmällä:

Taulukko 1, Medallion-tasot – Mitä kullakin tasolla säilytetään ja kuka sitä käyttää
Taso Sisältö Kuka käyttää
Bronze Raakadata täsmälleen sellaisenaan kuin se tulee lähdejärjestelmästä. Ei muokkauksia, ei laadunvarmistusta — vain lataus- ja käsittelymetatiedot (latausaika, eräajon tunniste, lähdejärjestelmä) lisätään mukaan. Data-insinöörit, virheenselvitys, auditointi
Silver Puhdistettu ja yhdistetty data: duplikaatit poistettu, viittaukset tarkistettu, tietotyypit korjattu, useasta lähdejärjestelmästä tuleva data yhdistetty yhdeksi näkymäksi. Tässä kerroksessa myös surrogaattiavaimet luodaan. Data-analyytikot, itsepalveluraportointi, koneoppiminen
Gold Liiketoiminnan käyttöön valmis data: aggregoitu, mallinnettu tähtimalliksi ja optimoitu kyselynopeuden mukaan. Liiketoimintakäyttäjät, Power BI -raportit, johdon mittarit

Mitä Medallion-arkkitehtuuri EI ole

Miksi Medallion-arkkitehtuuri kannattaa ottaa käyttöön?

Yksi massiivinen ETL-ajo lähdejärjestelmästä raportointivalmiiseen tauluun on nopea rakentaa mutta hidas ylläpitää: kun ajo epäonnistuu puolivälissä tai raportin luku on väärä, ei ole tapaa selvittää missä vaiheessa virhe syntyi ilman koko putken purkamista. Medallion-arkkitehtuuri korjaa tämän jakamalla muunnoksen näkyviin, tarkistettaviin vaiheisiin.

Miksi Medallionia EI aina kannata rakentaa

Missä Medallion-arkkitehtuuria käytetään?

Termi syntyi lakehouse-alustoilla (Databricks, ja sittemmin Microsoft Fabric OneLake, Synapse, Snowflake), joissa Bronze/Silver/Gold ovat usein kirjaimellisesti kolme eri kansiota tai skeemaa samassa data-alustassa. Malli ei kuitenkaan vaadi lakehousea toimiakseen — sama kerrosajattelu pätee jokaiseen perinteiseen tietovarastoon ja Power BI -kehitykseen:

Toisin sanoen: jos organisaatiossa on erillinen staging-tietokanta, integraatiokerros ja raportointimalli, siellä on jo käytännössä Medallion-arkkitehtuuri — vaikka kerroksia ei olisi koskaan nimetty Bronzeksi, Silveriksi tai Goldiksi.

Missä Medallion EI toimi

Miten Medallion-arkkitehtuuri rakennetaan käytännössä?

Rakentaminen etenee kerros kerrokselta, ja jokaisella kerroksella on oma vastuunsa — sekoittamalla vastuita kerrosten välillä koko hyöty katoaa.

  1. Bronze: lataa muuttamatta. Lähdejärjestelmän taulut ladataan sellaisenaan, lisäten vain tekniset metasarakkeet (latausaika, eräajon tunniste, lähdejärjestelmän nimi). Ei suodatuksia, ei liiketoimintasääntöjä — jos lähde lähettää virheellisen rivin, se päätyy Bronzeen sellaisenaan.
  2. Silver: puhdista, yhdistä, avaa. Duplikaatit poistetaan, puuttuvat viittaukset korjataan tai merkitään, tietotyypit yhdenmukaistetaan ja useasta lähteestä tuleva sama entiteetti (esim. asiakas kahdesta eri järjestelmästä) yhdistetään yhdeksi riviksi. Tässä vaiheessa luodaan myös surrogaattiavaimet — ei aiemmin, koska Bronzen duplikaatit loisivat turhia avaimia, eikä myöhemmin, koska jokainen Gold-taulu tarvitsee saman yhteisen avaimen. Avaimet materialisoidaan Silver-tasolla eli kirjoitetaan fyysisiin tauluihin, ja se tehdään ennen faktataulun latausta: faktan lataus liittyy valmiiseen avaimeen sen sijaan että ratkaisisi sen itse.
  3. Gold: mallinna liiketoiminnan käyttöön. Silver-data litistetään ja mallinnetaan tähtimalliksi: faktataulut ja dimensiot, nimetty liiketoiminnan termein, valmiina ladattavaksi Power BI -tietomalliin.

Sama asiakasentiteetti kolmella kerroksella näyttää SQL:nä tältä — huomaa miten rajoitteet ja liiketoiminnan nimeäminen ilmestyvät vasta sitä mukaa kun kerros nousee:

-- Bronze: lähdetaulu sellaisenaan + tekniset metasarakkeet
CREATE TABLE bronze.Asiakas_raw (
    AsiakasTunnus    VARCHAR(50)  NULL,   -- ei rajoitteita: virheellinenkin rivi säilyy
    AsiakasNimi      VARCHAR(200) NULL,
    Segmentti        VARCHAR(50)  NULL,
    LatausAika       DATETIME2    NOT NULL DEFAULT SYSDATETIME(),
    EraTunniste      VARCHAR(50)  NOT NULL,
    Lahdejarjestelma VARCHAR(50)  NOT NULL
);

-- Silver: puhdistettu ja yhdistetty — surrogaattiavain luodaan tässä
CREATE TABLE silver.DimAsiakas (
    AsiakasAvain  INT          NOT NULL,   -- SK, mapping-taulusta
    AsiakasTunnus VARCHAR(50)  NOT NULL,   -- NK säilyy attribuuttina
    AsiakasNimi   VARCHAR(200) NOT NULL,
    Segmentti     VARCHAR(50)  NOT NULL,
    CONSTRAINT PK_DimAsiakas PRIMARY KEY (AsiakasAvain)
);

-- Gold: raportointimalli — relaatioissa vain surrogaattiavaimet
CREATE VIEW gold.D_Asiakas AS
SELECT AsiakasAvain,
       AsiakasNimi AS [Asiakas],
       Segmentti   AS [Asiakassegmentti]
FROM   silver.DimAsiakas;

Kerrosten välinen siirtymä hoidetaan yleensä ajastetulla, inkrementaalisella latauksella: jokainen erä käsittelee vain uudet tai muuttuneet rivit lähtien Bronzesta ja edeten Silveriin ja Goldiin samassa järjestyksessä joka kerta. ETL/ELT-työkalu orkestroi ajojärjestyksen, mutta itse kerrosjako on arkkitehtuurin ydin riippumatta siitä, ajetaanko muunnokset SQL:llä, Sparkilla vai Power Queryllä.

Miten Medallionia EI kannata rakentaa

Milloin Medallion-arkkitehtuuria kannattaa käyttää — ja milloin ei?

Päätös ei ole makuasia vaan kynnyskysymys. Medallion maksaa kolminkertaisen infrastruktuurin ja hitaamman ensimmäisen toimituksen, ja tuottaa vastineeksi jäljitettävyyttä ja uudelleenkäyttöä. Jos kumpaakaan ei tarvita, kolme kerrosta on kolme ylimääräistä paikkaa joissa data voi mennä rikki. Käy kuusi signaalia läpi. Jos yksikin rivi osuu sarakkeeseen Medallion kannattaa, rakenna kerrokset. Jos kaikki kuusi osuvat sarakkeeseen ylimitoitettu, rakenna suoraan Gold-malli.

Taulukko 2, Medallionin kannattavuus – Signaalit jotka ratkaisevat tarvitaanko kolme kerrosta vai ei
Signaali Medallion kannattaa Medallion on ylimitoitettu
Lähdejärjestelmiä Kaksi tai useampi syöttää samaa entiteettiä — asiakas tulee CRM:stä ja laskutuksesta, ja ne on yhdistettävä yhdeksi riviksi Yksi lähde, yksi skeema, ei mitään yhdistettävää
Datan kuluttajia Useampi tiimi tai raportti lukee samaa puhdistettua dataa Yksi raportti, yksi katsoja
Jäljitettävyys Auditointi tai regulaatio vaatii polun raakadatasta lopulliseen lukuun asti Riittää että luku on oikein tänään
Uudelleenajo Logiikka muuttuu ja koko historia pitää laskea uudelleen ilman että lähdejärjestelmää kysytään uudestaan Lähteestä saa haettua saman datan milloin tahansa uudelleen
Elinkaari Ratkaisu elää vuosia ja vaihtaa ylläpitäjää matkan varrella Kertaraportti, joka on tarpeeton kolmen kuukauden päästä
Kurinalaisuus Kerrosten säännöistä pidetään kiinni myös kiireessä Sääntöjä ei valvo kukaan — silloin kolme kerrosta on kolme paikkaa joissa sama bugi voi piillä
Dataneuvoksen mielipide