runtime

datasets real and made-up data to practise on

Datasets

Data for the Playground, Database Lab and Performance Lab. Pick one and open its files.

Two years of a fictional online shop: customers, products, orders, order lines, payments and reviews.

300 orders7 tablesJan 2024 – Dec 2025

what to watch for

Tricky rows

  • Emails with uppercase letters or surrounding spaces6 rows
  • City names with inconsistent case or stray spaces9 rows
  • The same person signed up twice: a second customer_id with the same email in different case2 rows
  • Exact duplicate order rows from a retried export6 rows

files

Open a file to see what one row means, its columns and a preview. Open in Playground starts a new file there with code that loads it.

customers150 rows · 9 columns · CSV

One row per customer account. Some customers never ordered.

In your code: data/customers.csv

  • customer_idtextkey

    C + 5 digits

  • first_nametext

    Invented first name

  • last_nametext

    Invented last name

  • emailtext

    Unique, lowercase in the clean table

  • citytext · can be empty

    Profile city; empty when the customer never filled it in

  • statetext

    Two-letter US state

  • segmenttext

    consumer or business

  • signup_attimestamp

    Account creation, UTC (YYYY-MM-DD HH:MM:SS). Some accounts predate 2024

  • marketing_opt_inboolean

    Agreed to marketing email

sellers60 rows · 6 columns · CSV

Marketplace sellers who list products.

In your code: data/sellers.csv

  • seller_idtextkey

    S + 3 digits

  • nametext

    Store name

  • citytext

    Seller city

  • statetext

    Two-letter US state

  • joined_ondate

    Date the seller joined

  • tiertext

    standard, plus or enterprise

products328 rows · 10 columns · CSV

The catalogue. Products can launch during the period or be discontinued.

In your code: data/products.csv

  • product_idtextkey

    P + 4 digits

  • skutext

    Stock code (SKU)

  • nametext

    Product name

  • categorytext

    One of 8 categories

  • subcategorytext

    Subcategory within the category

  • seller_idtext→ sellers

    Seller who lists it

  • list_pricedecimal

    Current shelf price in USD; order lines record the price paid

  • weight_kgdecimal · can be empty

    Shipping weight; missing for some products

  • launched_ondate

    First day the product could be ordered

  • discontinued_ondate · can be empty

    Last listing date; empty if still sold

orders300 rows · 15 columns · CSV

One row per order. Totals are subtotal + shipping_fee + tax.

In your code: data/orders.csv

  • order_idtextkey

    O + 6 digits. Increases day by day, but not by time within a day: sort by ordered_at for time order

  • customer_idtext→ customers

    Who ordered

  • ordered_attimestamp

    Order time, UTC

  • channeltext

    web, app, phone or marketplace

  • statustext

    processing, shipped, delivered, cancelled or returned (as of 2025-12-31)

  • promo_codetext · can be empty

    Promotion applied, if any

  • subtotaldecimal

    Sum of line totals after discount

  • shipping_feedecimal

    0 at $50+ or with FREESHIP, else 5.99

  • taxdecimal

    7% of subtotal

  • totaldecimal

    Amount charged

  • ship_citytext

    Delivery city

  • ship_statetext

    Delivery state

  • shipped_attimestamp · can be empty

    Empty for processing and cancelled orders

  • delivered_attimestamp · can be empty

    Empty until delivered

  • estimated_deliverydate

    Promised delivery date (order date + 6 days)

order_items454 rows · 7 columns · CSV

Order lines. unit_price is the price at order time, which can differ from today's list_price.

In your code: data/order_items.csv

  • order_idtextkey→ orders

    Order

  • line_nointegerkey

    Line number in the order, starting at 1

  • product_idtext→ products

    Product

  • quantityinteger

    Units ordered

  • unit_pricedecimal

    Price per unit when ordered

  • discount_ratedecimal

    Promotion discount, 0–0.25

  • line_totaldecimal

    quantity × unit_price × (1 − discount_rate), rounded to cents

payments334 rows · 7 columns · CSV

Payment events. An order can have a failed attempt, a split gift-card payment, a cancelled card hold or a refund (negative amount).

In your code: data/payments.csv

  • payment_idtextkey

    PAY + 7 digits

  • order_idtext→ orders

    Order

  • attemptinteger

    Attempt number within the order

  • methodtext

    card, paypal, apple_pay, gift_card or bank_transfer

  • statustext

    captured, failed, voided or refunded

  • amountdecimal

    USD; refunds are negative

  • created_attimestamp

    Event time, UTC

reviews119 rows · 9 columns · CSV

Product reviews written after delivery. Late deliveries and returns get lower ratings.

In your code: data/reviews.csv

  • review_idtextkey

    R + 6 digits

  • order_idtext→ orders

    Order the product came in

  • product_idtext→ products

    Product reviewed

  • customer_idtext→ customers

    Reviewer

  • ratinginteger

    1–5 stars

  • titletext · can be empty

    Short headline; often empty

  • bodytext · can be empty

    Review text; often empty

  • created_attimestamp

    When the review was posted

  • verified_purchaseboolean

    Always true here

relationships

How to join these tables. Left column matches the right column.

  • products.seller_id → sellers.seller_id
  • orders.customer_id → customers.customer_id
  • order_items.order_id → orders.order_id
  • order_items.product_id → products.product_id
  • payments.order_id → orders.order_id
  • reviews.order_id → orders.order_id
  • reviews.product_id → products.product_id
  • reviews.customer_id → customers.customer_id

where the course uses it

Lessons and practice questions use small samples of Online Store; projects open its files.

Online Store dataset — Python Datasets · Runtime