Food Delivery Dataset for Analysts
This ready-made food delivery dataset is designed for analysts practicing SQL and Power BI. It includes 23,731 synthetic records across three tables, covering orders, customers, and deliveries. A free sample is available, with the full download requiring credits.
At a glance
- 3tables
- 23,731rows
- 15columns
- Jan 2022 – Dec 2024date range
The 3 tables
preview and data dictionary per tableCustomers customers · table · 5,000 rows
Information about the customers.
Preview
| customer_iduuid | customer_namestring | citystring | statestring | signup_datedate |
|---|---|---|---|---|
| 6b67b28f-d528-4fc9-b242-c1ef2c412a07 | Jeffrey Thompson | Chicago | IL | 2024-09-08 |
| 9eb851e0-21fd-462c-beda-06f3b17e5eb5 | Thomas Miller | Phoenix | AZ | 2023-03-26 |
| cec9905f-7fdb-4405-ae46-f4192d6cf0cd | Arthur Davis | Austin | TX | 2022-04-01 |
| 5e9f56e8-2a2f-49a8-9601-7dcf89c8cc30 | Carol Rodriguez | Houston | TX | 2022-04-18 |
| bae6614c-3872-4e09-8bbc-590f7575541f | Donald Wilson | Phoenix | AZ | 2023-08-22 |
| 83ea9283-cdee-4e6d-a241-44906db33464 | Sharon Martinez | Dallas | TX | 2022-11-10 |
| 83187fb0-dd21-438d-afbd-5bc1ebf93e08 | Richard Anderson | Los Angeles | CA | 2024-06-22 |
| 21679ca5-46e6-4cb7-affc-ce8824d235ee | Elizabeth Thomas | San Diego | CA | 2024-03-28 |
| de013651-9151-440d-b2b4-c712b5896571 | Charles Jackson | New York | NY | 2023-06-23 |
| b6ce594c-f097-4cb3-b03e-ddd2db1c2399 | Linda White | San Antonio | TX | 2024-11-16 |
Data dictionary
| column | type | description | example | null % |
|---|---|---|---|---|
customer_ | uuid | Unique identifier for the customer.unique | 6b67b28f-d528-4fc9-b242-c1ef2c412a07 | 0% |
customer_ | string | Full name of the customer. | Jeffrey Thompson | 0% |
city | string | City of customer residence. | Chicago | 0% |
state | string | US State of customer residence. | IL | 0% |
signup_ | date | Date when customer created their account. | 2024-09-08 | 0% |
Deliveries deliveries · dimension table · 10,000 rows
Details of each delivery fulfillment.
Preview
| delivery_iduuid | driver_idstring | delivery_timedatetime | delivery_regionstring |
|---|---|---|---|
| 79ea5af9-b5f9-4535-996f-f877496fd54a | DRV-2055 | 2023-01-26 19:55:10 | Central |
| 55293261-a051-4f8c-a964-8c55c2a2b264 | DRV-8194 | 2024-04-14 19:11:34 | Central |
| 9d03488b-8fbc-4590-9418-834cc9e80b2d | DRV-6516 | 2022-11-19 11:49:45 | Central |
| ad8859bf-687d-46d1-abc7-c57513bd42b7 | DRV-9575 | 2024-05-11 12:48:13 | Central |
| 502306ee-d0c7-4cda-a78f-ac92968c575d | DRV-5918 | 2023-08-20 20:57:08 | Central |
| 9be073f3-1104-41f8-b5bc-fb676fc55ac5 | DRV-7660 | 2022-05-19 17:49:11 | Central |
| 669add39-6bd2-489c-929d-612068d93f83 | DRV-8564 | 2024-07-14 11:55:12 | Central |
| 2c120895-d129-41ce-9039-1183a64625f9 | DRV-7979 | 2022-08-17 22:00:36 | Central |
| b24dc7db-f61c-45b6-a412-f1ebc2ab51ca | DRV-8001 | 2024-06-16 15:58:26 | Central |
| f72b954d-68b6-4d5c-afb2-a0272dffd9da | DRV-6067 | 2023-09-14 19:50:25 | Central |
Data dictionary
| column | type | description | example | null % |
|---|---|---|---|---|
delivery_ | uuid | Primary key identifying the delivery fulfillment record. | 79ea5af9-b5f9-4535-996f-f877496fd54a | 0% |
driver_ | string | Identifier of the courier/driver handling the delivery. | DRV-2055 | 0% |
delivery_ | datetime | Timestamp when the order was completed and delivered to customer. | 2023-01-26 19:55:10 | 0% |
delivery_ | string | Geographic fulfillment sector for the delivery. | Central | 0% |
Orders orders · fact table · 8,731 rows
Records of customer orders.
Preview
| order_iduuid | order_datedate | order_timestring | order_valuedecimal | customer_iduuid | delivery_iduuid |
|---|---|---|---|---|---|
| dcb31f71-34b2-467c-bdc1-47e77374c3ad | 2022-09-12 | 20:31:22 | 19.95 | 5e9f56e8-2a2f-49a8-9601-7dcf89c8cc30 | f9cb9989-65ef-4a58-a251-ec2cbf805f61 |
Data dictionary
| column | type | description | example | null % |
|---|---|---|---|---|
order_ | uuid | Unique identifier for each placed order. | ad3e1df0-ca60-4715-be70-13baccbaf9ad | 0% |
order_ | date | Date when the order was placed between 2022 and 2024. | 2023-11-26 | 0% |
order_ | string | Time of day when the order was placed in 24-hour HH:MM:SS format. | 22:37:22 | 0% |
order_ | decimal | Total checkout value of the order in USD. | 19.05 | 0% |
customer_ | uuid | Foreign key to customers.customer_id. | 8fd204ef-3c0f-43d8-86bd-895163dfae28 | 0% |
delivery_ | uuid | Foreign key to deliveries.delivery_id. | edb57441-6915-48de-ac27-2a4cfd081ba6 | 0% |
How the tables join
orders.customer_id references customers.customer_idmany to one: each Orders row points to one Customers roworders.delivery_id references deliveries.delivery_idmany to one: each Orders row points to one Deliveries row
Questions to answer with it
Calculate the average delivery time per region using the deliveries and orders tables.
Join deliveries and orders on delivery_id. Extract the hour from delivery_time. Group by delivery_region.
tables: deliveries, orders
Identify the top 10 customers by order frequency using the customers and orders tables.
Join customers and orders on customer_id. Count orders per customer. Order by count descending and take the top 10.
tables: customers, orders
Determine the peak hours for food delivery orders by analyzing order_time in the orders table.
Extract the hour from the order_time column. Group by hour and count the number of orders. Find the hour with the maximum count.
tables: orders
Create a Power BI dashboard showing total order value by region and customer.
Join all three tables. Use visuals to show SUM(orders.order_value) by deliveries.delivery_region and customers.customer_name.
tables: customers, orders, deliveries
Starter SQL
run against this data before publishingTable names match the SQLite file and the SQL script.
Average Order Value by Customer City
SELECT c.city, AVG(o.order_value) AS average_order_value
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.city
ORDER BY average_order_value DESC
LIMIT 20;Total Orders per Delivery Region
SELECT d.delivery_region, COUNT(o.order_id) AS total_orders
FROM deliveries d
JOIN orders o ON d.delivery_id = o.delivery_id
GROUP BY d.delivery_region
ORDER BY total_orders DESC
LIMIT 20;Customer with Most Orders
SELECT c.customer_name, COUNT(o.order_id) AS order_count
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_name
ORDER BY order_count DESC
LIMIT 1;Delivery Time Trend by Month
SELECT STRFTIME('%Y-%m', d.delivery_time) AS delivery_month, AVG(STRFTIME('%s', d.delivery_time) - STRFTIME('%s', o.order_date)) AS avg_delivery_seconds
FROM deliveries d
JOIN orders o ON d.delivery_id = o.delivery_id
GROUP BY delivery_month
ORDER BY delivery_month
LIMIT 20;Load it with pandas
import pandas as pd
# Unzip the CSV download first: one file per table
customers = pd.read_csv("customers.csv")
deliveries = pd.read_csv("deliveries.csv")
orders = pd.read_csv("orders.csv")
# Join orders to customers
df = orders.merge(customers, left_on="customer_id", right_on="customer_id", how="left", suffixes=("", "_customers"))
print(df.groupby("city").size().sort_values(ascending=False))Using it in your tool
- Excel
- Load each table into a separate Excel sheet. Use Power Query to join tables based on their keys (e.g., customer_id, delivery_id). Create a PivotTable from the joined data to summarize order values by region.
- Power BI
- Create a star schema by connecting the 'orders' table (fact table) to 'customers' and 'deliveries' tables (dimension tables) using their respective keys. Build measures like Total Order Value (SUM(orders[order_value])) and Average Delivery Time (AVERAGE(deliveries[delivery_time])).
- SQL
- Load the SQLite or SQL relational download. The tables are pre-defined with primary and foreign keys. Join 'orders' with 'customers' on 'customer_id' and with 'deliveries' on 'delivery_id' to analyze relationships.
Formats available
- CSV (zip)One CSV file per table, zipped
- Excel workbookOne worksheet per table
- SQLite databaseA ready-to-query database file with every table
- Parquet (zip)One Parquet file per table, zipped
- SQL scriptCREATE TABLE with primary and foreign keys, then INSERTs
- CSVA single CSV file
- JSONA single JSON file
How this data was generated
Synthetic data. Every row was generated: no real people, customers or companies are in this dataset.
Synthetic data generated by GoMask DataFactory from a relational blueprint: keys, links and rules are enforced in code, text columns are filled by a language model. No real people, companies or transactions.
- Data is synthetically generated by GoMask DataFactory.
- Data is designed to mimic typical food delivery operations.
- Checked by an automated quality gate: unique keys, no orphan foreign keys, required columns filled, declared rules and date ranges (realism score 100).
Limitations
- The dataset is synthetic and does not represent actual user behavior or market conditions.
- Delivery driver performance metrics are not included.
- Customer location data is limited to city and state.
- Distributions and correlations are modelled, not measured from real records.
blueprint · food-delivery-dataset
Scale this dataset
Same tables. As many rows as you need.
Open the blueprint behind these 3 tables in Data Factory: keep the relationships, change a column, and generate it at the size you need.
- 200,000 rows
- 1,000,000 rows
- Tables
- customers, deliveries, orders
- Licence
- yours to use, including commercially
- API slug
- food-delivery-dataset