1
1
import re
2
- from typing import List , Set , Union
2
+ from typing import List , Optional , Set , Union
3
3
4
4
from feast .data_source import DataSource , PushSource , RequestSource
5
5
from feast .entity import Entity
@@ -119,7 +119,10 @@ def update_feature_views_with_inferred_features_and_entities(
119
119
120
120
for fv in fvs :
121
121
join_keys = set (
122
- [entity_name_to_join_key_map [entity_name ] for entity_name in fv .entities ]
122
+ [
123
+ entity_name_to_join_key_map .get (entity_name )
124
+ for entity_name in fv .entities
125
+ ]
123
126
)
124
127
125
128
# Fields whose names match a join key are considered to be entity columns; all
@@ -137,7 +140,10 @@ def update_feature_views_with_inferred_features_and_entities(
137
140
138
141
# Respect the `value_type` attribute of the entity, if it is specified.
139
142
for entity_name in fv .entities :
140
- entity = entity_name_to_entity_map [entity_name ]
143
+ entity = entity_name_to_entity_map .get (entity_name )
144
+ # pass when entity does not exist. Entityless feature view case
145
+ if entity is None :
146
+ continue
141
147
if (
142
148
entity .join_key
143
149
not in [entity_column .name for entity_column in fv .entity_columns ]
@@ -181,7 +187,7 @@ def update_feature_views_with_inferred_features_and_entities(
181
187
182
188
def _infer_features_and_entities (
183
189
fv : FeatureView ,
184
- join_keys : Set [str ],
190
+ join_keys : Set [Optional [ str ] ],
185
191
run_inference_for_features ,
186
192
config ,
187
193
) -> None :
0 commit comments