|
16 | 16 | from sqlalchemy.engine import Engine |
17 | 17 | from sqlalchemy.orm import sessionmaker |
18 | 18 |
|
19 | | -from feast import FileSource, errors |
| 19 | +from feast import FileSource, entity, errors |
20 | 20 | from feast.data_source import DataSource |
21 | 21 | from feast.errors import InvalidEntityType |
22 | 22 | from feast.feature_logging import LoggingConfig, LoggingSource |
@@ -176,19 +176,21 @@ def get_historical_features( |
176 | 176 | expected_join_keys = _get_join_keys(project, feature_views, registry) |
177 | 177 | assert isinstance(config.offline_store, MsSqlServerOfflineStoreConfig) |
178 | 178 | engine = make_engine(config.offline_store) |
179 | | - entity_df["event_timestamp"] = pandas.to_datetime( |
180 | | - entity_df["event_timestamp"], utc=True |
181 | | - ).fillna(pandas.Timestamp.now()) |
| 179 | + if isinstance(entity_df, pandas.DataFrame): |
| 180 | + entity_df_event_timestamp_col = ( |
| 181 | + offline_utils.infer_event_timestamp_from_entity_df(dict(zip(list(entity_df.columns), list(entity_df.dtypes)))) |
| 182 | + ) |
| 183 | + entity_df[entity_df_event_timestamp_col] = pandas.to_datetime( |
| 184 | + entity_df[entity_df_event_timestamp_col], utc=True |
| 185 | + ).fillna(pandas.Timestamp.now()) |
182 | 186 |
|
| 187 | + # TODO: figure out how to deal with entity dataframes that are strings |
183 | 188 | ( |
184 | 189 | table_schema, |
185 | 190 | table_name, |
186 | 191 | ) = _upload_entity_df_into_sqlserver_and_get_entity_schema( |
187 | 192 | engine, config, entity_df, full_feature_names=full_feature_names |
188 | 193 | ) |
189 | | - entity_df_event_timestamp_col = ( |
190 | | - offline_utils.infer_event_timestamp_from_entity_df(table_schema) |
191 | | - ) |
192 | 194 |
|
193 | 195 | _assert_expected_columns_in_sqlserver( |
194 | 196 | expected_join_keys, |
|
0 commit comments