33import logging
44from concurrent .futures import ThreadPoolExecutor , wait
55from dataclasses import dataclass
6- from datetime import datetime
7- from typing import Callable , List , Literal , Optional , Sequence , Union
6+ from typing import Literal , Optional , Sequence , Union
87
98import boto3
109import pyarrow as pa
10+ from infra .common .retrieval_task import HistoricalRetrievalTask
1111from pydantic import StrictStr
12- from tqdm import tqdm
1312
1413from feast import utils
1514from feast .batch_feature_view import BatchFeatureView
2120 MaterializationJobStatus ,
2221 MaterializationTask ,
2322)
23+ from feast .infra .compute_engines .base import ComputeEngine
2424from feast .infra .offline_stores .offline_store import OfflineStore
2525from feast .infra .online_stores .online_store import OnlineStore
2626from feast .infra .registry .base_registry import BaseRegistry
2929from feast .stream_feature_view import StreamFeatureView
3030from feast .utils import _get_column_names
3131from feast .version import get_version
32- from feast .infra .compute_engines .base import ComputeEngine
33- from infra .common .retrieval_task import HistoricalRetrievalTask
3432
3533DEFAULT_BATCH_SIZE = 10_000
3634
@@ -52,9 +50,7 @@ class LambdaComputeEngineConfig(FeastConfigBaseModel):
5250
5351@dataclass
5452class LambdaMaterializationJob (MaterializationJob ):
55- def __init__ (self ,
56- job_id : str ,
57- status : MaterializationJobStatus ) -> None :
53+ def __init__ (self , job_id : str , status : MaterializationJobStatus ) -> None :
5854 super ().__init__ ()
5955 self ._job_id : str = job_id
6056 self ._status = status
@@ -81,24 +77,24 @@ class LambdaComputeEngine(ComputeEngine):
8177 WARNING: This engine should be considered "Alpha" functionality.
8278 """
8379
84- def get_historical_features (self ,
85- registry : BaseRegistry ,
86- task : HistoricalRetrievalTask ) -> pa .Table :
80+ def get_historical_features (
81+ self , registry : BaseRegistry , task : HistoricalRetrievalTask
82+ ) -> pa .Table :
8783 raise NotImplementedError (
8884 "Lambda Compute Engine does not support get_historical_features"
8985 )
9086
9187 def update (
92- self ,
93- project : str ,
94- views_to_delete : Sequence [
95- Union [BatchFeatureView , StreamFeatureView , FeatureView , OnDemandFeatureView ]
96- ],
97- views_to_keep : Sequence [
98- Union [BatchFeatureView , StreamFeatureView , FeatureView , OnDemandFeatureView ]
99- ],
100- entities_to_delete : Sequence [Entity ],
101- entities_to_keep : Sequence [Entity ],
88+ self ,
89+ project : str ,
90+ views_to_delete : Sequence [
91+ Union [BatchFeatureView , StreamFeatureView , FeatureView , OnDemandFeatureView ]
92+ ],
93+ views_to_keep : Sequence [
94+ Union [BatchFeatureView , StreamFeatureView , FeatureView , OnDemandFeatureView ]
95+ ],
96+ entities_to_delete : Sequence [Entity ],
97+ entities_to_keep : Sequence [Entity ],
10298 ):
10399 # This should be setting up the lambda function.
104100 r = self .lambda_client .create_function (
@@ -124,23 +120,23 @@ def update(
124120 waiter .wait (FunctionName = self .lambda_name )
125121
126122 def teardown_infra (
127- self ,
128- project : str ,
129- fvs : Sequence [Union [BatchFeatureView , StreamFeatureView , FeatureView ]],
130- entities : Sequence [Entity ],
123+ self ,
124+ project : str ,
125+ fvs : Sequence [Union [BatchFeatureView , StreamFeatureView , FeatureView ]],
126+ entities : Sequence [Entity ],
131127 ):
132128 # This should be tearing down the lambda function.
133129 logger .info ("Tearing down lambda %s" , self .lambda_name )
134130 r = self .lambda_client .delete_function (FunctionName = self .lambda_name )
135131 logger .info ("Finished tearing down lambda %s: %s" , self .lambda_name , r )
136132
137133 def __init__ (
138- self ,
139- * ,
140- repo_config : RepoConfig ,
141- offline_store : OfflineStore ,
142- online_store : OnlineStore ,
143- ** kwargs ,
134+ self ,
135+ * ,
136+ repo_config : RepoConfig ,
137+ offline_store : OfflineStore ,
138+ online_store : OnlineStore ,
139+ ** kwargs ,
144140 ):
145141 super ().__init__ (
146142 repo_config = repo_config ,
@@ -160,32 +156,16 @@ def __init__(
160156 self .lambda_name = self .lambda_name [:64 ]
161157 self .lambda_client = boto3 .client ("lambda" )
162158
163- def materialize (
164- self ,
165- registry : BaseRegistry ,
166- tasks : List [MaterializationTask ]
167- ) -> List [MaterializationJob ]:
168- return [
169- self ._materialize_one (
170- registry ,
171- task .feature_view ,
172- task .start_time ,
173- task .end_time ,
174- task .project ,
175- task .tqdm_builder ,
176- )
177- for task in tasks
178- ]
179-
180159 def _materialize_one (
181- self ,
182- registry : BaseRegistry ,
183- feature_view : Union [BatchFeatureView , StreamFeatureView , FeatureView ],
184- start_date : datetime ,
185- end_date : datetime ,
186- project : str ,
187- tqdm_builder : Callable [[int ], tqdm ],
160+ self ,
161+ registry : BaseRegistry ,
162+ task : MaterializationTask ,
188163 ):
164+ feature_view = task .feature_view
165+ start_date = task .start_time
166+ end_date = task .end_time
167+ project = task .project
168+
189169 entities = []
190170 for entity_name in feature_view .entities :
191171 entities .append (registry .get_entity (entity_name , project ))
0 commit comments