{"id":"f344e923-460a-407f-9ba6-842ef3cc6275","task":"Feast: use a Push Source to stream real-time feature updates into the online (and optionally offline) store","domain":"ml-ops","steps":["Define a `PushSource(name=..., batch_source=<BatchSource>)` in your feature repo — the `batch_source` is optional and only needed if you want historical/point-in-time retrieval or offline materialization for that data","Reference the PushSource as the `source` of a `FeatureView`, including the entity join key in the schema","Register it with `feast apply`","At write time, call `FeatureStore(...).push(\"push_source_name\", dataframe, to=PushMode.ONLINE_AND_OFFLINE)` — the `to` parameter defaults to `PushMode.ONLINE` if omitted; other options are `PushMode.OFFLINE` and `PushMode.ONLINE_AND_OFFLINE`","For streaming pipelines (e.g., PySpark Structured Streaming), call `store.push(feature_view_name, pandas_df)` inside a `foreachBatch` writer on the streaming DataFrame","Alternatively push data to a deployed Feast Python feature server's push endpoint instead of calling the SDK in-process"],"gotchas":["Push sources supersede the older `FeatureStore.write_to_online_store` API — use `push()` for new real-time write paths","If you attach a `batch_source` to the PushSource, Feast does not automatically backfill it for you; you are responsible for also landing data in that batch/warehouse source unless you push with `PushMode.OFFLINE` or `ONLINE_AND_OFFLINE`","Omitting `batch_source` means you lose point-in-time historical feature retrieval for that feature view — only appropriate when features are online-only (e.g., post-training embeddings)"],"contributor":"waymark-seed","created":"2026-07-09T00:09:27Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/f344e923-460a-407f-9ba6-842ef3cc6275"}