fix: Use batch source timestamp column names in remote online writes - #6752
Open
arose26 wants to merge 1 commit into
Open
fix: Use batch source timestamp column names in remote online writes#6752arose26 wants to merge 1 commit into
arose26 wants to merge 1 commit into
Conversation
RemoteOnlineStore.online_write_batch labelled the timestamps it sent to the feature server with the literals "event_timestamp" and "created". The server rebuilds the frame and resolves those columns by the names the feature view's batch source configures, so any feature view using a different timestamp_field or created_timestamp_column failed server-side with KeyError: 'Field "..." does not exist in schema'. The timestamp values were never lost, only labelled with names the server does not look up. Resolve both column names from the batch source, and keep the previous literals as the fallback when a name is not configured. Closes feast-dev#6595 Signed-off-by: arose26 <145766958+arose26@users.noreply.github.com>
arose26
force-pushed
the
fix/remote-write-timestamp-column-names
branch
from
August 18, 2026 10:54
66b7790 to
800af7f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this fixes
Closes #6595.
RemoteOnlineStore.online_write_batchlabelled the timestamps in its request bodywith the literals
"event_timestamp"and"created":The feature server rebuilds that frame verbatim (
pd.DataFrame(request.df)infeature_server.py) and hands it to the standard conversion, which resolves thetimestamp columns by the names the feature view's batch source configures
(
sdk/python/feast/utils.py,_convert_arrow_fv_to_proto):So for any feature view whose source sets
timestamp_fieldorcreated_timestamp_columnto something other than those two literals, the clientemits the column under one name and the server looks it up under another:
The timestamp value is never lost — it is on the wire, just labelled with a name the
server does not look up. Client and server simply disagree on the column names.
The change
Resolve both column names from the feature view's batch source, falling back to the
previous literals when a name is not configured. That keeps the payload byte-identical
for the default-named case (which is why the existing
test_unix_timestamp_value_serialized_as_intstill passes unchanged) and makes thecustom-named case round-trip.
This is the only site with the hardcoding —
_convert_arrow_odfv_to_protosynthesizesits own timestamps and is unaffected, and no other caller builds this payload.
Tests
Two tests in
TestRemoteOnlineStoreWriteBatch, both failing before the change:test_timestamp_columns_use_batch_source_names— asserts the request body labels thetimestamps with the configured names.
test_write_batch_payload_round_trips_through_server_conversion— the one thatactually pins the contract: it takes the payload this client produced, rebuilds the
frame the way the server does, runs
_convert_arrow_fv_to_protoon it, and assertsboth timestamps survive. Without the fix this test reproduces the reported
KeyError: 'Field "..." does not exist in schema'directly.Wider check: every unit test file touching the remote /
write_to_online_store/_convert_arrowpaths (22 files) gives 219 passed, 5 skipped both with and without thischange. The 11 collection errors in that set are pre-existing missing optional
dependencies in my environment (
sqlite_vec,boto3,redis, …), identical on bothsides.
ruff check,ruff formatandmypy feast/infra/online_stores/remote.pyareclean.
🤖 Written with Claude Code (Claude Opus 5), reviewed by @arose26.