SCENARIOS / SC-005 / JAFFLE SHOP
SC-005 Commerce / dbt Dataset

Jaffle Shop

dbt's classic Jaffle Shop dataset, regenerated as a live simulation at any scale.

Async Tick FSM
PLACED SHIPPED COMPLETED RETURNED CUSTOMER ORDER PAYMENT 1 N 1 N FK MODEL
SC-005 / SCHEMATICCommerce / dbt Dataset
Clock tick · 1 day/turn
Update Asynchronous
Statuses placed / shipped / completed / returned
Source dbt jaffle-shop-classic
Tables 3
OVERVIEW

The fictional store from dbt's "how to model data" tutorials, rebuilt as a simulation. An order's status — placed → shipped → completed, with an optional return tail — is literally its finite-state-machine state. Customers accumulate orders, each order spawns one or more payments, and timestamp fields stamp ordered/shipped/completed/returned dates against a clock where one turn is one day. The output matches the shape of dbt's raw seeds.

A drop-in, scalable stand-in for the most widely-used data-modelling tutorial dataset. Because every row is generated by the same status distributions as the original, the snapshots reproduce its mix (mostly completed, ~12% returned) — handy for teaching, testing transforms, or benchmarking warehouse tooling at sizes the static seed can't reach.

TRAITS
Async
Independent, event-driven timelines
Tick
Discrete fixed-step time
FSM
Entities are finite-state machines
SCHEMA

Linked tables with guaranteed referential integrity.

TABLECOLUMNSDESCRIPTION
customer ID, first_name, last_name, number_of_orders, joined_at, current_state One row per customer: name, lifetime order count and join date.
order ID, ordered_at, shipped_at, completed_at, returned_at, customer_id, current_state One row per order: milestone timestamps (each stamped on first entry to that state) and the customer reference; status is the FSM state itself.
payment ID, payment_method, amount, paid_at, order_id, current_state One row per payment: method, amount in cents, paid date and parent order.
LIVE API

Generated REST endpoints. Also exposed as MCP tools.

POST /scenarios/jaffle-shop/experiments Seed a new store
POST /scenarios/jaffle-shop/experiments/{eid}/run Advance the store N days
GET /scenarios/jaffle-shop/experiments/{eid}/entities/order Query orders by status
GET /scenarios/jaffle-shop/experiments/{eid}/events Append-only event log
GET /scenarios/jaffle-shop/experiments/{eid}/dataset Download the exported dataset
SEMANTIC LAYER

OSI-compatible definition, emitted with the dataset.

# jaffle-shop.osi.yaml — emitted automatically
semantic_model:
  name: "jaffle-shop"
  source: "duckdb://jaffle-shop.db"
  entities:
    - name: customer
      primary_key: id
  dimensions:
    - name: state
      type: categorical
    - name: t
      type: time
  measures:
    - name: row_count
      agg: count
    - name: active
      agg: sum
      filter: "state = 'ACTIVE'"