Bundled CSV/Parquet
The OCEL 2.1 bundled format stores an OCEL 2.0 log as a ZIP archive of typed tables. It is intended for efficient import into databases and dataframe engines. The same layout can also be used as an uncompressed directory.
Archive Layout
Every bundle contains ocel-meta.json. The remaining files use either CSV or Parquet,
never a mixture of both:
ocel-meta.json
events/event_<encoded-event-type>.<ext>
objects/object_<encoded-object-type>.<ext>
object_changes/object_changes_<encoded-object-type>.<ext>
relations/e2o.<ext>
relations/o2o.<ext>
Here, <ext> is csv or parquet. Each event type has one event table, and each
object type has both an object table and an object-change table. An object-change table
without changes contains only its header in CSV or zero rows in Parquet.
Type names in filenames are UTF-8 percent-encoded. ASCII letters, digits, ., _, and
- remain unescaped; every other byte is written as %HH with uppercase hexadecimal
digits.
place order -> events/event_place%20order.csv
pay/order -> events/event_pay%2Forder.csv
sales person -> objects/object_sales%20person.csv
The metadata mapping is authoritative: importers do not infer type names from filenames.
Metadata
ocel-meta.json declares the OCEL and bundle versions, storage format, event and
object types, attribute names and primitive types, and all table locations.
{
"ocelVersion": "2.0",
"bundleFormatVersion": "1.0",
"storageFormat": "csv",
"eventTypes": {
"place order": {
"file": "events/event_place%20order.csv"
}
},
"objectTypes": {
"orders": {
"file": "objects/object_orders.csv",
"changesFile": "object_changes/object_changes_orders.csv"
}
},
"relations": {
"e2o": "relations/e2o.csv",
"o2o": "relations/o2o.csv"
}
}
Tables
The bundle contains these logical tables:
| Table | Required columns |
|---|---|
| Event table | ocel_id, ocel_time, followed by the event type’s attributes |
| Object table | ocel_id, followed by the object type’s attributes |
| Object-change table | ocel_id, ocel_time, ocel_changed_field, followed by the object type’s attributes |
| Event-to-object relations | ocel_event_id, ocel_object_id, ocel_qualifier |
| Object-to-object relations | ocel_source_id, ocel_target_id, ocel_qualifier |
Object attribute values in an object table are initial values, effective from the Unix
epoch (1970-01-01T00:00:00Z). Each row in an object-change table assigns one new
value: ocel_changed_field names the changed attribute, and that attribute’s column
contains the value.
For example:
ocel_id,ocel_time,ocel_changed_field,price
o1,2024-02-01T12:00:00Z,price,109.76
File Extension
The canonical archive extension is .ocel.zip. The uncompressed form is a directory
with the same internal layout.
Further Resources
See the OCEL 2.1 specification for the complete definition and bundled running example.