Push sources are used in cases when some external actor actively sends data into a dataset.
Push sources are suitable for:
- IoT devices that periodically send data
- Business processes that report events directly into ODF dataset
- For ingesting data from streaming data APIs and event queues like Apache Kafka.
Push sources are added via metadata event:
kind: DatasetSnapshot
version: 1
content:
name: gps
kind: Root
metadata:
- kind: AddPushSource
sourceName: default
read:
kind: NdJson
schema:
- t TIMESTAMP
- long DOUBLE
- lat DOUBLE
merge:
kind: Append
- kind: SetVocab
eventTimeColumn: t
Note that push sources are named:
This allows you to declare multiple push sources per dataset, which may be useful for situations where several devices from different manufacturers produce slightly different data, but you want them to be able to write directly to one dataset.
An existing push source can be deactivated using event.
Also note that, just like polling sources, push sources pass data through a Merge Strategy, so they too can benefit, for example, from event deduplication of the merge strategy.
Pushing Data via CLI
To push data into dataset via kamu use kamu ingest command.
You can push data from files:
echo '{"t": "2020-01-01T00:00:00Z", "long": -123.12, "lat": 49.28}' > data.json
kamu ingest gps data.json
Or from directly from STDIN:
echo '{"t": "2020-01-01T00:00:00Z", "long": -123.12, "lat": 49.28}' | kamu ingest gps --stdin
Result:
┌────────┬────┬──────────────────────────┬──────────────────────┬─────────┬───────┐
│ offset │ op │ system_time │ t │ long │ lat │
├────────┼────┼──────────────────────────┼──────────────────────┼─────────┼───────┤
│ 0 │ +A │ 2024-01-31T03:51:03.618Z │ 2020-01-01T00:00:00Z │ -123.12 │ 49.28 │
└────────┴────┴──────────────────────────┴──────────────────────┴─────────┴───────┘
Pushing Data via API
See APIs documentation for various options of pushing data programmatically via APIs.
While push sources define a specific for their data - there is some tolerance. For example you can push data to the source that declares format and kamu will attempt to read it using the same schema.
This behavior works both in CLI commands and in push APIs. Last modified on March 16, 2026