Skip to content

Commit 3733354

Browse files
authored
chore: Offline write error description to include missing_expected_columns, extra_unexpected_columns (#5740)
chore: offline write error description to include missing_expected_columns, extra_unexpected_columns (#5559) Signed-off-by: Jacob Weinhold <[email protected]>
1 parent a8498c2 commit 3733354

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

sdk/python/feast/feature_store.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2046,9 +2046,17 @@ def write_to_offline_store(
20462046
source_columns = [column for column, _ in column_names_and_types]
20472047
input_columns = df.columns.values.tolist()
20482048

2049-
if set(input_columns) != set(source_columns):
2049+
input_columns_set = set(input_columns)
2050+
source_columns_set = set(source_columns)
2051+
2052+
if input_columns_set != source_columns_set:
2053+
missing_expected_columns = sorted(source_columns_set - input_columns_set)
2054+
extra_unexpected_columns = sorted(input_columns_set - source_columns_set)
2055+
20502056
raise ValueError(
2051-
f"The input dataframe has columns {set(input_columns)} but the batch source has columns {set(source_columns)}."
2057+
"The input dataframe columns do not match the batch source columns. "
2058+
f"missing_expected_columns: {missing_expected_columns}, "
2059+
f"extra_unexpected_columns: {extra_unexpected_columns}."
20522060
)
20532061

20542062
if reorder_columns:

sdk/python/tests/integration/offline_store/test_offline_write.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,18 @@ def test_writing_incorrect_schema_fails(environment, universal_data_sources):
6666
"created": [ts, ts],
6767
},
6868
)
69-
with pytest.raises(ValueError):
69+
expected_missing = ["acc_rate", "avg_daily_trips"]
70+
expected_extra = ["incorrect_schema"]
71+
72+
with pytest.raises(ValueError, match="missing_expected_columns") as excinfo:
7073
store.write_to_offline_store(
7174
driver_fv.name, expected_df, allow_registry_cache=False
7275
)
7376

77+
error_message = str(excinfo.value)
78+
assert f"missing_expected_columns: {expected_missing}" in error_message
79+
assert f"extra_unexpected_columns: {expected_extra}" in error_message
80+
7481

7582
@pytest.mark.integration
7683
@pytest.mark.universal_offline_stores

0 commit comments

Comments
 (0)