1717 RequestSource ,
1818)
1919from feast .driver_test_data import create_driver_hourly_stats_df
20+ from feast .feature_view import DUMMY_ENTITY_FIELD
2021from feast .field import Field
2122from feast .infra .online_stores .sqlite import SqliteOnlineStoreConfig
2223from feast .on_demand_feature_view import on_demand_feature_view
23- from feast .types import Array , Bool , Float32 , Float64 , Int64 , String
24+ from feast .types import (
25+ Array ,
26+ Bool ,
27+ Float32 ,
28+ Float64 ,
29+ Int64 ,
30+ String ,
31+ ValueType ,
32+ from_value_type ,
33+ )
2434
2535
2636class TestOnDemandPythonTransformation (unittest .TestCase ):
@@ -51,7 +61,9 @@ def setUp(self):
5161 path = driver_stats_path , allow_truncated_timestamps = True
5262 )
5363
54- driver = Entity (name = "driver" , join_keys = ["driver_id" ])
64+ driver = Entity (
65+ name = "driver" , join_keys = ["driver_id" ], value_type = ValueType .INT64
66+ )
5567
5668 driver_stats_source = FileSource (
5769 name = "driver_hourly_stats_source" ,
@@ -73,6 +85,19 @@ def setUp(self):
7385 source = driver_stats_source ,
7486 )
7587
88+ driver_stats_entity_less_fv = FeatureView (
89+ name = "driver_hourly_stats_no_entity" ,
90+ entities = [],
91+ ttl = timedelta (days = 0 ),
92+ schema = [
93+ Field (name = "conv_rate" , dtype = Float32 ),
94+ Field (name = "acc_rate" , dtype = Float32 ),
95+ Field (name = "avg_daily_trips" , dtype = Int64 ),
96+ ],
97+ online = True ,
98+ source = driver_stats_source ,
99+ )
100+
76101 @on_demand_feature_view (
77102 sources = [driver_stats_fv ],
78103 schema = [Field (name = "conv_rate_plus_acc_pandas" , dtype = Float64 )],
@@ -151,6 +176,7 @@ def python_singleton_view(inputs: dict[str, Any]) -> dict[str, Any]:
151176 pandas_view ,
152177 python_view ,
153178 python_singleton_view ,
179+ driver_stats_entity_less_fv ,
154180 ]
155181 )
156182
@@ -162,13 +188,19 @@ def python_singleton_view(inputs: dict[str, Any]) -> dict[str, Any]:
162188 pandas_view ,
163189 python_view ,
164190 python_demo_view ,
191+ driver_stats_entity_less_fv ,
165192 ]
166193 )
167194 self .store .write_to_online_store (
168195 feature_view_name = "driver_hourly_stats" , df = driver_df
169196 )
170- assert len (self .store .list_all_feature_views ()) == 4
171- assert len (self .store .list_feature_views ()) == 1
197+ assert driver_stats_fv .entity_columns == [
198+ Field (name = driver .join_key , dtype = from_value_type (driver .value_type ))
199+ ]
200+ assert driver_stats_entity_less_fv .entity_columns == [DUMMY_ENTITY_FIELD ]
201+
202+ assert len (self .store .list_all_feature_views ()) == 5
203+ assert len (self .store .list_feature_views ()) == 2
172204 assert len (self .store .list_on_demand_feature_views ()) == 3
173205 assert len (self .store .list_stream_feature_views ()) == 0
174206
0 commit comments