Monthly European electricity-generation data flows from the Ember Energy API through a Python ingestion step into an S3-and-Glue batch pipeline, lands in a queryable Data Catalog, and surfaces as an interactive QuickSight dashboard.
External data source · monthly electricity generation, 88 geographies
Python + boto3 · fetches JSON, uploads to S3
Landing zone · JSON, partitioned by extraction date
Explode array → Flatten fields → Parquet/Snappy
Analytics-ready columnar output
Infers schema from processed Parquet
Central metadata store
SQL validation & ad-hoc analytics
Stacked area chart · KPI cards · geo map · Country / Source filters
| Service | Role |
|---|---|
| Amazon S3 | Raw & processed data lake (two buckets) |
| AWS Glue ETL | JSON → Parquet, Explode + Flatten transforms |
| AWS Glue Crawler | Auto-discovers schema from processed Parquet |
| Glue Data Catalog | Central metadata store (ember_energy_db) |
| Amazon Athena | SQL validation & ad-hoc analytics |
| Amazon QuickSight | Interactive dashboard for trends & energy mix |
| Issue | Resolution |
|---|---|
| Nested JSON in Athena | Added Explode + Flatten transforms to the Glue job |
| Duplicate records | Clear processed bucket + catalog table before re-running ETL/crawler |
| Broken time axis | Cast date column to Date type before SPICE import |