Case 02 / 04 · 2025–2026
Fingrid Data Platform
One grid API, two cloud implementations: Finland's national power-grid data, ingested incrementally and refined into a governed star schema — built first on Azure Data Factory, then rebuilt declaratively on AWS with Terraform and Delta Live Tables.
- Databricks
- Delta Lake
- Medallion
- Unity Catalog
- Power BI
01 · The problem
Fingrid — the operator of Finland's national power grid — publishes electricity consumption and wind- and solar-generation data through an open REST API. It is high-frequency, paginated, and time-series by nature: a long way from anything an analyst can trust, and useful only once it is ingested reliably, modelled cleanly, and governed.
I built that platform twice. First on Azure: Data Factory driving a control-table pipeline into a Databricks medallion on Delta Lake. Then on AWS, rebuilt declaratively — the same medallion expressed as Delta Live Tables, with the lake and workspace provisioned by Terraform and shipped through Asset Bundles.
Building it twice is the point. The architecture is identical in both — metadata-driven ingestion, incremental by watermark, bronze → silver → gold on Delta, governed centrally and deployed from code. What differs is only which primitives each cloud gives you to express it. The toggle below switches between the two implementations.
02 · Architecture
Same architecture · two clouds
The declarative rebuild: Delta Live Tables generates the medallion from config, Terraform provisions the S3 lake underneath it, and Asset Bundles ship the whole thing as one versioned unit.
- AWS S3
- Delta Live Tables
- Auto Loader
- Terraform
- Asset Bundles
- GitHub Actions
Ingest
Fingrid Open API
A control table drives an incremental, per-dataset loop — paginated and rate-limit aware — pulling only each source's new time-window.
Land
S3 landing zone
Raw JSON lands per dataset on S3, picked up downstream by Databricks Auto Loader.
Transform
Delta Live Tables medallion
- Bronze Auto Loader · dynamic per-dataset tables · quality expectations
- Silver Cleanse · flatten JSON · typecast — per-dataset logic map
- Gold Auto CDC (SCD-1) into a star schema
Serve
Gold star schema
Conformed facts & dimensions feed Power BI.
- fact_consumption
- fact_generation_forecast
- dim_date · dim_time
- dim_customer_type
→ Power BI
Unity Catalog governs access and lineage across every layer — bronze, silver, and gold.
Trigger
manual dispatch
target environment as an input
CI
GitHub Actions
builds the Databricks Asset Bundle
Dev
bundle deploy · bundle run
w_dev · dev S3 · dev workspace
Test
bundle deploy · bundle run
w_test · test S3 · test workspace
The original build: Data Factory drives one parameterized control-table pipeline, and Azure DevOps promotes a single release artifact across three isolated environments.
- Azure Data Factory
- ADLS Gen2
- ARM templates
- Azure DevOps
Source
Fingrid Open API
Live grid and energy-market data — high-frequency, paginated, time-series by nature.
Ingest
Azure Data Factory
One parameterized pipeline serves every endpoint: a Lookup reads the control table, a ForEach fans the copy out — batch size configurable per source.
Land
ADLS Gen2 landing zone
Each run copies only the new time-window — an Until loop walks the watermark forward, then writes the refreshed timestamp back.
Transform
Databricks medallion on Delta
- Bronze Raw, as landed — ACID transactions · schema enforcement
- Silver Validated · cleansed · conformed
- Gold Business-ready star schema
Serve
Gold star schema
The single source of truth for reporting.
→ Power BI
A single control table holds every source’s state and parameters — endpoints, watermarks, batch sizes — so loads stay incremental, cheap, and idempotent.
Commit
GitHub
Feature branches merge to main — the factory is code.
Build
Azure DevOps pipeline
builds the Data Factory release artifact once; every environment gets the same build
Dev
ADF · development
where data engineers author and commit
data platform · dev env
Test
ADF · test
QA engineers validate the release against real loads
data platform · test env
Prod
ADF · production
business users consume governed, analytics-ready data
data platform · production env
03 · How it works
-
Metadata-driven ingestion
A single control table holds every source — its endpoint, watermark, and batch size — so one parameterized pipeline serves all of them instead of a brittle pipeline per source. On Azure a Lookup feeds a ForEach; on AWS a lookup task fans out with a for-each. Adding a source is a row of configuration, not a deployment.
-
Incremental by watermark
Each run reads the last-loaded window from the control table, copies only the new slice, then writes the refreshed timestamp back — an Until loop on Azure, a paginated and rate-limit-aware pull on AWS. Loads stay cheap and idempotent, and a re-run costs nothing.
-
A medallion on Delta
Bronze (raw, as landed) → silver (cleansed, flattened, typed) → gold (a conformed star schema), with ACID transactions and schema enforcement throughout. On AWS the medallion is declarative: Delta Live Tables generates its graph from config and Auto CDC applies SCD-1 upserts into the gold facts, so the pipeline grows when the config does.
-
Governed and reproducible from code
Unity Catalog governs access and lineage across every layer, and the infrastructure underneath is code on both clouds — Terraform builds the AWS lake, ARM templates the Azure side. The pipeline is packaged once, as an Asset Bundle or an ADF release artifact, then promoted between environments as the same build rather than rebuilt for each one.
04 · Proof
AWS


Azure


05 · Outcome
The result is a hands-off, config-driven platform: a new Fingrid dataset is one row in a control table, and it flows — ingested incrementally, refined through bronze, silver, and gold, modelled into the star schema — all the way to Power BI, governed end to end and reproducible across every environment.
And because it exists twice, the design is demonstrably portable. The same medallion, the same governance posture, the same promotion discipline — expressed in whichever primitives the platform hands you. That portability is worth more than either implementation on its own.
Ask the assistant about this