{{ message }}
feat: Add skip_feature_view_validation parameter to push() for ODFVs with missing UDF dependencies#5894
Draft
Copilot wants to merge 11 commits into
Draft
feat: Add skip_feature_view_validation parameter to push() for ODFVs with missing UDF dependencies#5894Copilot wants to merge 11 commits into
Copilot wants to merge 11 commits into
Conversation
Co-authored-by: franciscojavierarceo <4163062+franciscojavierarceo@users.noreply.github.com>
Co-authored-by: franciscojavierarceo <4163062+franciscojavierarceo@users.noreply.github.com>
Co-authored-by: franciscojavierarceo <4163062+franciscojavierarceo@users.noreply.github.com>
Co-authored-by: franciscojavierarceo <4163062+franciscojavierarceo@users.noreply.github.com>
Co-authored-by: franciscojavierarceo <4163062+franciscojavierarceo@users.noreply.github.com>
Co-authored-by: franciscojavierarceo <4163062+franciscojavierarceo@users.noreply.github.com>
Member
Sorry, something went wrong.
…tency Co-authored-by: franciscojavierarceo <4163062+franciscojavierarceo@users.noreply.github.com>
Copilot
AI
changed the title
feat: Add skip_validation parameter to push() for ODFVs with missing UDF dependencies
Jan 24, 2026
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
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.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.
What this PR does / why we need it:
store.push()fails withModuleNotFoundErrorwhen On-Demand Feature Views contain UDFs that reference modules unavailable in the current environment (e.g., training code not deployed to serving infrastructure). This blocks data ingestion in production environments.Changes
Transformation deserialization bypass:
PandasTransformation.from_proto()andPythonTransformation.from_proto()acceptskip_udfparameterdill.loads()when enabledCall chain propagation:
push(),push_async(),write_to_online_store(),write_to_online_store_async()acceptskip_feature_view_validationparameterlist_all_feature_views()→ registry → proto_registry_utilsOnDemandFeatureView.from_proto()propagatesskip_udfto transformation parsingSelective UDF skipping (Critical safeguard):
skip_feature_view_validationonly skips UDF deserialization for ODFVs withwrite_to_online_store=Falsewrite_to_online_store=Truealways load their actual UDFs since they will be executed during push operationslist_on_demand_feature_views()to checkwrite_to_online_storeflag before applyingskip_udfCaching strategy:
list_all_feature_views()andlist_on_demand_feature_views()to support conditional cachingskip_udf=False(default): Uses cached versions (_list_all_feature_views_cached,_list_on_demand_feature_views_cached) with@registry_proto_cache_with_tagsdecorator for performanceskip_udf=True: Bypasses caching to prevent cache pollution with dummy UDFs@registry_proto_cache_with_tagsdecorator was moved from the public functions to new internal cached versions because the decorator's signature only supports 3 parameters (registry_proto, project, tags) and cannot accommodate the additionalskip_udfparameterAPI Consistency:
skip_feature_view_validationto match the naming convention from PR feat: Add skip_feature_view_validation parameter to FeatureStore.apply() and plan() #5859 forapply()andplan()methodsUsage
Important: ODFVs with
write_to_online_store=Truewill always have their UDFs deserialized even whenskip_feature_view_validation=True, as their transformations are executed during push. Only ODFVs that don't execute transformations during push can safely skip UDF loading.All parameters default to
Falsefor backward compatibility. No API breaking changes.Which issue(s) this PR fixes:
Addresses ModuleNotFoundError when pushing data with ODFVs containing UDFs that reference environment-specific modules.
Misc
test_skip_feature_view_validation_only_applies_to_non_writing_odfvs()to validate thatwrite_to_online_store=TrueODFVs always load real UDFsapply()methodskip_feature_view_validation) for API consistency across all FeatureStore methodswrite_to_online_store_async,push_async) as async functionality should be server-specific going forwardOriginal prompt
This section details on the original issue you should resolve
<issue_title>Read On-Demand Feature View and deserialization while pushing data</issue_title>
<issue_description> ## Description
A ModuleNotFoundError occurs when calling store.push() to ingest data into the Online Store. The error is triggered when Feast attempts to synchronize the registry and encounters an On-Demand Feature View.
Because Feast uses dill to serialize/deserialize User Defined Functions (UDFs), it fails if the execution environment lacks the specific Python module (in this case, training) that was present when the UDF was originally defined and registered.
🔍 Error Traceback
Steps to Reproduce
Root Cause Analysis
This is a serialization dependency issue. When dill (the library Feast uses for pickling) serializes a function, it often stores references to the modules where global variables or dep...
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.