Real World Project on Formula1 Racing using Azure Databricks, Delta Lake and orchestrated by Azure Data Factory. This project aims to provide a data analysis solution for Formula-1 race results using Azure Databricks. This is an ETL pipeline to ingest Formula 1 motor racing data, transform and load it into our data warehouse for reporting and analysis purposes. The data is sourced from ergast.com, a website dedicated to Formula 1 statistics, and is stored in Azure Datalake Gen2 storage. Data transformation and analysis were performed using Azure Databricks. The entire process is orchestrated using Azure Data Factory.
The structure of the database is shown in the following ER Diagram and explained in the ERD Diagram
The requirements for this project is broken down into six different parts which are;
Ingest all 8 files into Azure data lake.
- Ingested data must have the same schema applied.
- Ingested data must have audit columns.
- Ingested data must be stored in columnar format (i.e., parquet).
- We must be able to analyze the ingested data via SQL.
- Ingestion Logic must be able to handle incremental load.
- Join the key information required for reporting to create a new table.
- Join the key information required for analysis to create a new table.
- Transformed tables must have audit columns.
- Transformed data must be stored in columnar format (i.e parquet).
- Transformation logic must be able to handle incremental load.
- Find Driver Standings.
- Find Constructor/Team Standings.
- Scheduled to run every sunday at 10pm.
- Monitor pipelines.
- Rerun failed pipelines.
- Set up alerts on failures
SELECT race_year,
driver_name,
COUNT(1) AS total_races,
SUM(calculated_points) AS total_points,
AVG(calculated_points) AS avg_points
FROM f1_presentation.calculated_race_results
WHERE driver_name IN (SELECT driver_name FROM v_dominant_drivers WHERE driver_rank <= 10)
GROUP BY race_year, driver_name
ORDER BY race_year, avg_points DESCSELECT race_year,
team_name,
COUNT(1) AS total_races,
SUM(calculated_points) AS total_points,
AVG(calculated_points) AS avg_points
FROM f1_presentation.calculated_race_results
WHERE team_name IN (SELECT team_name FROM v_dominant_teams WHERE team_rank <= 5)
GROUP BY race_year, team_name
ORDER BY race_year, avg_points DESCContributions to enhance and expand the capabilities of this project are welcome! Please follow these guidelines:
- Fork the repository.
- Create a new branch for your feature or enhancement.
- Commit your changes with descriptive messages.
- Submit a pull request for review.
For any inquiries or feedback, feel free to contact the project maintainer:
Email - ahmedashraffcih@gmail.com
LinkedIn - ahmedashraffcih
Feel free to customize and expand upon this README to better suit the specifics of your project.





