Projektit — 2026
Räätälöity ELT-työkalu integraatioihin
Python-pohjainen Extract-Load-Transform korvaa legacy-ETL:n — kärsivällinen rajapintakäsittely, blue-green-swap ja monitoroitava tuoreus
Modernissa ELT:ssä data viedään ensin datavarastoon ja jalostetaan vasta siellä SQL:llä — putkesta tulee yksinkertaisempi, nopeampi ja luotettavampi. Rakensin räätälöidyn ELT-työkalun joka korvaa hauraan legacy-ETL:n: monitorointi, blue-green-swap ja retry-logiikka sisäänrakennettuina.
Asiakas
Asiakas
Aikajakso
2026
Tekninen pino
- Python 3.12
- Azure Container Apps Job
- Azure SQL Data Warehouse
- Azure Key Vault + Managed Identity
- pyodbc + ODBC 18 for SQL Server
- Terraform + GitHub Actions OIDC federation
- 01
Nollasta tuotantoon muutamassa päivässä — yksi monorepo, yksi Terraform-state, yksi deploy-putki
- 02
Datavirran 100 %:n onnistuminen kärsivällisellä retry-logiikalla ja automaattisella second-passilla
- 03
Nolla-katkosten data-päivitys blue-green-swapilla — kuluttajat eivät koskaan näe tyhjää taulua kesken latauksen
- 04
Ei-tekniselle vastuuhenkilölle tilabannerin ja taulukohtaisen tuoreusnäkymän antava monitorointi — data-luotettavuus näkyy yhdellä silmäyksellä
- 05
Tuoteajattelu alusta asti: per-asiakas-deployment-malli, asiakaskohtainen konfiguraatio ei kovakoodattuna — sama alusta skaalautuu uusille asiakkaille ilman arkkitehtuurimuutoksia
Mistä kyse
ETL vs. ELT — lyhyesti. ETL (Extract-Transform-Load) oli aikanaan vakio, koska datavarastot olivat hitaita ja kalliita: oli järkevää muuntaa data putkessa ennen latausta ja ladata vasta valmis lopputulos. ELT (Extract-Load-Transform) kääntää järjestyksen: data viedään raakana ensin datavarastoon ja jalostetaan siellä SQL:llä. Moderni pilvidatavarasto jaksaa tämän helposti, ja hyödyt ovat merkittäviä: putki on yksinkertaisempi, raakadata säilyy debugattavissa, jalostuslogiikka on versioitavissa SQL-tiedostoina ja muutos toiseen rakenteeseen tapahtuu ilman uutta latausta.
Lähtötilanne
Asiakkaan raportointi nojasi Azure Data Factory -kopiointiajoihin, jotka siirsivät tietoa jäsenrekisterijärjestelmän REST-rajapinnasta datavarastoon. Kun toimittaja päivitti rajapinnan sivutusmallia, ADF ei enää osannut hakea kuin ensimmäisen sivun — mutta mikään ei näkynyt rikki: data “tuli”, vain vanhentuneena. Hälytyskelloja ei ollut. Osa analyyseista oli kuukausitolkulla väärällä datalla ennen havaintoa.
Tehty ratkaisu
Suunnittelin ja toteutin Python-pohjaisen ELT-työkalun joka korvaa ADF:n. Työkalu pyörii Container App Jobina aikataulutetusti (tai manuaalisesti tarvittaessa), lataa raakadatan omaan skeemaan ja jalostaa sen SQL:llä raportointinäkymiksi. Keskeisiä suunnittelupäätöksiä:
- Blue-green-swap jokaiselle taululle. Uusi data ladataan rinnakkaistauluun; onnistumisen jälkeen vanhan päälle tehdään atominen rename. Analyytikko ei näe välitilaa.
- Tuoreus näkyviin. Yhden näkymän kysely
ops.v_freshnesskertoo mistä hetkestä minkäkin taulun data on — ja statussivu näyttää sen ei-tekniselle valvojalle punainen/keltainen/vihreä -tilana, jotta hiljainen vanhentuminen ei toistu. - ADF-parity kärsivällisyydelle. Kun toimittajan rajapinta ruuhkautuu hetkellisesti, meidän client odottaa 30 sekunnin välein, yhteensä jopa tunnin per pyyntö — sama tarina kuin asiakkaan tutussa toolingissa, jotta 100 % onnistuminen on oikeasti saavutettavissa eikä “96 % riittää”.
- Per-näkymä-vikaeristys + second-pass. Yhden taulun ongelma ei kaada muita; epäonnistuneet kierretään vielä kerran ensikierroksen jälkeen 30 s tauon jälkeen. Transient-ruuhkat eivät päädy “failed”-riveiksi vaan saavat toisen mahdollisuuden.
- Infrastruktuuri koodina läpikotaisin. Terraform + GitHub Actions OIDC — ei manuaalisia portalmuutoksia, ei salaisuuksia CI-lokeissa,
terraform destroy+terraform applyrakentaa ympäristön uudestaan nollasta.
Lopputulos
Uudet ja vanhat ajot pyörivät hetken rinnakkain, jolloin rivit voitiin verrata SQL-tasolla ennen kuin cutover tehtiin. Asiakas sai:
- Luotettavan data-päivityksen oman monitorointinäkymän kera, jolloin poikkeukset havaitaan heti eikä kuukausien päästä.
- Dokumentoidun, auditoitavan ja re-deployattavan kokonaisuuden — tekninen velka ei synny vaan sitä vähennetään.
- Tuotemaisen alustan jonka voi per-deployment istuttaa toiselle samankaltaiselle organisaatiolle — asiakasspesifinen konfiguraatio tulee Terraform-muuttujista, ei koodista.
Projekti kattoi kokonaisvaltaisen kaaren konseptityöstä tuotantoon: arkkitehtuurivalinnat, tekninen toteutus, deployment, testaus, monitorointi ja dokumentaatio — samalla pitäen silmällä myöhemmän skaalautumisen ja tuotteistuksen.