End-to-end Google Cloud pipeline: a Cloud Run Job (Python) fetches yesterday’s KEF departures from kefairport.is/flug/brottfarir, cleans the data, standardizes timestamps, and appends to a date-partitioned BigQuery table every morning at 06:00 Europe/Zurich. An enriched BigQuery view derives delay and cancellation metrics that power the dashboard below.
/api/flightData with a rolling “yesterday” parameter, flattens/normalizes the JSON, writes a daily CSV to GCS, then loads into BigQuery via load_table_from_uri with WRITE_APPEND.keflavik-flights.KefAirport.flights_history; an enriched view computes new columns such as delay minutes, punctuality for the dashboard.raw_delay_min = DATETIME_DIFF(actual_dt, sched_dt, MINUTE)Delayed = (raw_delay_min > 0) (only flights with both times are measured)status != 'CNL' and DATETIME_DIFF(actual_dt, sched_dt, MINUTE) ≤ 16status = 'CNL' → treated as not punctual (excluded from on-time numerator)actual_dt to next day.
      Interact with the embedded Looker Studio report. For full-screen view, open it in a new tab.
Stack: Google Cloud Run (Jobs), Cloud Scheduler, BigQuery (partitioned), Python (requests, pandas, numpy, google-cloud-bigquery, pyarrow), Looker Studio.
Source: KEF Airport API (/api/flightData) with rolling “yesterday” parameter; enriched KPIs in a BigQuery view.