DataEngr

Synthetic dataset, CC0 1.0

Retail order events

Order events from a small synthetic shop, with duplicates, invalid rows, stale versions and conflicting IDs built in on purpose.

26 rows in 7 files, 4,672 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

Each row is one delivery of an order event: the order's full state at one source version, in Australian cents and UTC. The seven files are the batches the retail-orders pipeline is tested on, from a clean first batch to replays, conflicts and ties.

The rows are few enough to check by hand. The amount is order value in this example, not recognised accounting revenue, and the shop, its orders and its channels are invented.

Schema

order_events

Grain: One row per delivery of an order event. The same event can arrive more than once, so event_id is not unique within a file.

Every column of order_events, its type, whether it may be null and what it means
column_namecolumn_typenullmeaning
event_idVARCHARNOThe source event. A repeat with the same payload is a duplicate; with a different payload, a conflict.
order_idVARCHARNOThe order the event describes.
source_versionBIGINTNOThe order's version at the source. A higher version replaces a lower one.
order_dateDATENOThe day the order counts towards in the daily report.
channelVARCHARNOOne of web, store. Where the order was placed.
amount_centsBIGINTNOOrder value in Australian cents.
source_updated_atVARCHARNOWhen the source last changed the order, as ISO 8601 text in UTC. It breaks a tie between equal versions.
  • event_id

    VARCHAR, never null

    The source event. A repeat with the same payload is a duplicate; with a different payload, a conflict.

  • order_id

    VARCHAR, never null

    The order the event describes.

  • source_version

    BIGINT, never null

    The order's version at the source. A higher version replaces a lower one.

  • order_date

    DATE, never null

    The day the order counts towards in the daily report.

  • channel

    VARCHAR, never null

    One of web, store. Where the order was placed.

  • amount_cents

    BIGINT, never null

    Order value in Australian cents.

  • source_updated_at

    VARCHAR, never null

    When the source last changed the order, as ISO 8601 text in UTC. It breaks a tie between equal versions.

Sample rows

order_events

All 8 rows of initial.json
event_idVARCHARorder_idVARCHARsource_versionBIGINTorder_dateDATEchannelVARCHARamount_centsBIGINTsource_updated_atVARCHAR
e1o10012026-01-01web100002026-01-01T10:00:00Z
e1o10012026-01-01web100002026-01-01T10:00:00Z
e2o10112026-01-01store25002026-01-01T10:00:00Z
e3o10222026-01-02web70002026-01-02T10:00:00Z
bad1o10312026-01-02web-1002026-01-03T10:00:00Z
bad2o10412026-01-02unknown (breaks the schema on purpose)5002026-01-03T10:00:00Z
bad3NULL (breaks the schema on purpose)12026-01-02web5002026-01-03T10:00:00Z
e5o10512026-01-02store02026-01-02T10:00:00Z

What is wrong with it on purpose

Files and provenance

Source
Synthetic, written by hand by DataEngr
How it was made
DataEngr wrote each row by hand to exercise one pipeline rule; no generator or seed was used.
Rows last changed
18 September 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
retail-orders.zip, 7,158 bytes, SHA-256 3eeb8ffa19b30fe5adda1f9f5b87c420bcae0652f07dd77d467fff421ce44e5b
Every file in the package, its rows, its size in bytes and its SHA-256
filewhat it holdsrowsbytessha256
initial.jsonThe first batch: four good orders, one duplicate delivery and three invalid rows.81,436c95faeb99da38977b9a6797ec002d7e6bfd44b9a09d346a1f1ea94c21f12048d
followup.jsonThe next batch: a correction, a new order, replays, two stale versions and an invalid date.71,254464d7430a9cf05b71e02ed1a83d178760ad05cb1a97d5a5b1e203f265562b7c7
empty.jsonAn empty batch, which must change nothing.0337517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570
conflict-batch.jsonThe next batch with one event ID sent twice with different amounts.71,2540b71d62c2feb29f2c2eed4c4e1c840a93df0842c60c7b616b6a7d58fb0074be3
conflict-history.jsonAn event ID the first batch already used, now with a different amount.1182d13fa3903ecc0bb1dd59a9f10ef7aaf0d4e421971c6b88b2660e73e22a43be8d
tie-timestamp.jsonA second event at an order's current version, with a later timestamp.1182a23bd8bc1d08c58a0038131c985ff37addd6200b880f60e7f51b56bac0551c4c
tie-event-id.jsonTwo events at the same version and timestamp, settled by the greater event ID.2361ecc6369d878380b7b3afdc0c527b540b2fdf2437e6fa3b9a378529e11efa06b1

Run a pipeline on this