@@ -656,7 +656,7 @@ def _make_inferences(
656656 def _get_feature_views_to_materialize (
657657 self ,
658658 feature_views : Optional [List [str ]],
659- ) -> List [FeatureView ]:
659+ ) -> List [Union [ FeatureView , OnDemandFeatureView ] ]:
660660 """
661661 Returns the list of feature views that should be materialized.
662662
@@ -669,34 +669,53 @@ def _get_feature_views_to_materialize(
669669 FeatureViewNotFoundException: One of the specified feature views could not be found.
670670 ValueError: One of the specified feature views is not configured for materialization.
671671 """
672- feature_views_to_materialize : List [FeatureView ] = []
672+ feature_views_to_materialize : List [Union [ FeatureView , OnDemandFeatureView ] ] = []
673673
674674 if feature_views is None :
675- feature_views_to_materialize = utils ._list_feature_views (
675+ regular_feature_views = utils ._list_feature_views (
676676 self ._registry , self .project , hide_dummy_entity = False
677677 )
678- feature_views_to_materialize = [
679- fv for fv in feature_views_to_materialize if fv .online
680- ]
678+ feature_views_to_materialize . extend (
679+ [ fv for fv in regular_feature_views if fv .online ]
680+ )
681681 stream_feature_views_to_materialize = self ._list_stream_feature_views (
682682 hide_dummy_entity = False
683683 )
684- feature_views_to_materialize += [
685- sfv for sfv in stream_feature_views_to_materialize if sfv .online
686- ]
684+ feature_views_to_materialize .extend (
685+ [sfv for sfv in stream_feature_views_to_materialize if sfv .online ]
686+ )
687+ on_demand_feature_views_to_materialize = self .list_on_demand_feature_views ()
688+ feature_views_to_materialize .extend (
689+ [
690+ odfv
691+ for odfv in on_demand_feature_views_to_materialize
692+ if odfv .write_to_online_store
693+ ]
694+ )
687695 else :
688696 for name in feature_views :
697+ feature_view : Union [FeatureView , OnDemandFeatureView ]
689698 try :
690699 feature_view = self ._get_feature_view (name , hide_dummy_entity = False )
691700 except FeatureViewNotFoundException :
692- feature_view = self ._get_stream_feature_view (
693- name , hide_dummy_entity = False
694- )
701+ try :
702+ feature_view = self ._get_stream_feature_view (
703+ name , hide_dummy_entity = False
704+ )
705+ except FeatureViewNotFoundException :
706+ feature_view = self .get_on_demand_feature_view (name )
695707
696- if not feature_view .online :
708+ if hasattr ( feature_view , "online" ) and not feature_view .online :
697709 raise ValueError (
698710 f"FeatureView { feature_view .name } is not configured to be served online."
699711 )
712+ elif (
713+ hasattr (feature_view , "write_to_online_store" )
714+ and not feature_view .write_to_online_store
715+ ):
716+ raise ValueError (
717+ f"OnDemandFeatureView { feature_view .name } is not configured for write_to_online_store."
718+ )
700719 feature_views_to_materialize .append (feature_view )
701720
702721 return feature_views_to_materialize
@@ -1312,6 +1331,8 @@ def materialize_incremental(
13121331 )
13131332 # TODO paging large loads
13141333 for feature_view in feature_views_to_materialize :
1334+ if isinstance (feature_view , OnDemandFeatureView ):
1335+ continue
13151336 start_date = feature_view .most_recent_end_time
13161337 if start_date is None :
13171338 if feature_view .ttl is None :
@@ -1340,7 +1361,7 @@ def tqdm_builder(length):
13401361 return tqdm (total = length , ncols = 100 )
13411362
13421363 start_date = utils .make_tzaware (start_date )
1343- end_date = utils .make_tzaware (end_date )
1364+ end_date = utils .make_tzaware (end_date ) or _utc_now ()
13441365
13451366 provider .materialize_single_feature_view (
13461367 config = self .config ,
@@ -1351,13 +1372,13 @@ def tqdm_builder(length):
13511372 project = self .project ,
13521373 tqdm_builder = tqdm_builder ,
13531374 )
1354-
1355- self ._registry .apply_materialization (
1356- feature_view ,
1357- self .project ,
1358- start_date ,
1359- end_date ,
1360- )
1375+ if not isinstance ( feature_view , OnDemandFeatureView ):
1376+ self ._registry .apply_materialization (
1377+ feature_view ,
1378+ self .project ,
1379+ start_date ,
1380+ end_date ,
1381+ )
13611382
13621383 def materialize (
13631384 self ,
0 commit comments