Synthetic dataset, CC0 1.0
Customer snapshots
A dbt-style snapshot history of five synthetic customers and thirteen of their orders, built to show which joins rewrite history.
20 rows in 2 files, 2 tables, 2,687 bytes
Download and licence
Source: synthetic, written by hand by DataEngr. Licence: CC0 1.0, no attribution required.
Download includes the data and NOTICE.txt with its source, changes, licence and SHA-256. If you share it, follow that licence.
About this dataset
customer_snapshots.json models the output of a dbt snapshot on the timestamp strategy: one row per customer version, valid from dbt_valid_from until dbt_valid_to, with a null dbt_valid_to on the current row. orders.json holds thirteen orders in the retail-orders shape, with a customer_id added.
dbt_scd_id is a short readable label here (s1a, s1b and so on); dbt itself writes an md5 hash. The customers and their names are invented, and the rows were written by hand, not produced by a dbt run.
Schema
customer_snapshots
Grain: One row per recorded customer version, valid from dbt_valid_from until dbt_valid_to.
| column_name | column_type | null | meaning |
|---|---|---|---|
| dbt_scd_id | VARCHAR | NO | The snapshot row's ID: a short label here, an md5 hash in dbt. |
| customer_id | VARCHAR | NO | The customer the row describes, repeated once per recorded version. |
| customer_name | VARCHAR | NO | An invented name. |
| segment | VARCHAR | NO | One of standard, premium, gold. The attribute that changes over time. |
| region | VARCHAR | NO | An Australian state code. |
| dbt_valid_from | DATE | NO | The day this version became valid. |
| dbt_valid_to | DATE | YES | The day it stopped being valid; null on the current row. |
| dbt_updated_at | DATE | NO | The source's change date the snapshot saw, equal to dbt_valid_from on the timestamp strategy. |
dbt_scd_id
VARCHAR, never null
The snapshot row's ID: a short label here, an md5 hash in dbt.
customer_id
VARCHAR, never null
The customer the row describes, repeated once per recorded version.
customer_name
VARCHAR, never null
An invented name.
segment
VARCHAR, never null
One of standard, premium, gold. The attribute that changes over time.
region
VARCHAR, never null
An Australian state code.
dbt_valid_from
DATE, never null
The day this version became valid.
dbt_valid_to
DATE, may be null
The day it stopped being valid; null on the current row.
dbt_updated_at
DATE, never null
The source's change date the snapshot saw, equal to dbt_valid_from on the timestamp strategy.
orders
Grain: One row per order.
| column_name | column_type | null | meaning |
|---|---|---|---|
| order_id | VARCHAR | NO | The order. |
| customer_id | VARCHAR | NO | The customer who placed it, matching customer_snapshots.customer_id. |
| order_date | DATE | NO | The day the order was placed, which picks the snapshot version it belongs to. |
| channel | VARCHAR | NO | One of web, store. Where the order was placed. |
| amount_cents | BIGINT | NO | Order value in Australian cents. |
order_id
VARCHAR, never null
The order.
customer_id
VARCHAR, never null
The customer who placed it, matching customer_snapshots.customer_id.
order_date
DATE, never null
The day the order was placed, which picks the snapshot version it belongs to.
channel
VARCHAR, never null
One of web, store. Where the order was placed.
amount_cents
BIGINT, never null
Order value in Australian cents.
Sample rows
customer_snapshots
| dbt_scd_idVARCHAR | customer_idVARCHAR | customer_nameVARCHAR | segmentVARCHAR | regionVARCHAR | dbt_valid_fromDATE | dbt_valid_toDATE | dbt_updated_atDATE |
|---|---|---|---|---|---|---|---|
| s1a | c1 | Priya Raman | standard | NSW | 2026-01-01 | 2026-01-15 | 2026-01-01 |
| s1b | c1 | Priya Raman | premium | NSW | 2026-01-15 | NULL | 2026-01-15 |
| s2a | c2 | Bao Wong | standard | VIC | 2026-01-01 | NULL | 2026-01-01 |
| s3a | c3 | Ariana Singh | standard | QLD | 2026-01-01 | 2026-01-06 | 2026-01-01 |
| s3b | c3 | Ariana Singh | gold | QLD | 2026-01-06 | NULL | 2026-01-06 |
| s4a | c4 | Devon Clarke | standard | WA | 2026-01-01 | 2026-01-15 | 2026-01-01 |
| s5a | c5 | Meilin Zhao | standard | NSW | 2026-01-22 | NULL | 2026-01-22 |
orders
| order_idVARCHAR | customer_idVARCHAR | order_dateDATE | channelVARCHAR | amount_centsBIGINT |
|---|---|---|---|---|
| o1 | c1 | 2026-01-05 | web | 5000 |
| o2 | c1 | 2026-01-10 | store | 3000 |
| o3 | c1 | 2026-01-15 | web | 8000 |
| o4 | c1 | 2026-01-25 | web | 2000 |
| o5 | c2 | 2026-01-04 | store | 4000 |
| o6 | c2 | 2026-01-20 | web | 6000 |
| o7 | c3 | 2026-01-02 | web | 4500 |
| o8 | c3 | 2026-01-04 | store | 1500 |
What is wrong with it on purpose
A change on an order's own day
Customer c1 moves from standard to premium on 2026-01-15, the day their order o3 is placed.
Two changes between runs
Customer c3 is standard until 2026-01-06 and gold from then on; the premium state in between was never recorded.
A hard delete
Customer c4's last row closes on 2026-01-15 with no successor, but their order o11 is placed on 2026-01-20.
A late arrival
Customer c5's first row is valid from 2026-01-22, after their order o12 on 2026-01-10.
Files and provenance
- Source
- Synthetic, written by hand by DataEngr
- How it was made
- DataEngr wrote each row by hand for the dbt snapshots field note; no generator or seed was used.
- Rows last changed
- 2 October 2026
- Licence review
- DataEngr, 20 October 2026: DataEngr wrote every row itself; no third-party source, person or record is in the data, so CC0 1.0 applies, the licence the site gives its own synthetic data.
- Package
- customer-snapshots.zip, 3,994 bytes, SHA-256 851fe43159da97645c6f1948d5e25dd83d175f68b5451a5ce4a2265f093a0cf6
| file | what it holds | rows | bytes | sha256 |
|---|---|---|---|---|
| customer_snapshots.json | Seven snapshot rows for five customers. | 7 | 1,344 | 24a893d6af301d11159ac37839c61a2eb8bc1948e6fc7fd5ef1aa960491172fc |
| orders.json | Thirteen orders from the same five customers. | 13 | 1,343 | 76bd49f9337eee36ec3871b18a7d1801610aa6fa42afdda2eca3188b30cc9e87 |
customer_snapshots.json
Seven snapshot rows for five customers.
7 rows, 1,344 bytes
sha256 24a893d6af301d11159ac37839c61a2eb8bc1948e6fc7fd5ef1aa960491172fc
orders.json
Thirteen orders from the same five customers.
13 rows, 1,343 bytes
sha256 76bd49f9337eee36ec3871b18a7d1801610aa6fa42afdda2eca3188b30cc9e87