Skip to content

Commit 50e8755

Browse files
feat: Add snowflake support for date & number with scale (#3148)
Signed-off-by: Miles Adkins <miles.adkins@snowflake.com> Signed-off-by: Miles Adkins <miles.adkins@snowflake.com>
1 parent 8fbf13c commit 50e8755

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed

sdk/python/feast/infra/materialization/snowflake_engine.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,11 @@ def generate_snowflake_materialization_query(
334334
)
335335

336336
if feature_value_type_name == "UNIX_TIMESTAMP":
337-
feature_sql = f'{feature_sql}(DATE_PART(EPOCH_NANOSECOND, "{feature.name}")) AS "{feature.name}"'
337+
feature_sql = f'{feature_sql}(DATE_PART(EPOCH_NANOSECOND, "{feature.name}"::TIMESTAMP_LTZ)) AS "{feature.name}"'
338+
elif feature_value_type_name == "DOUBLE":
339+
feature_sql = (
340+
f'{feature_sql}("{feature.name}"::DOUBLE) AS "{feature.name}"'
341+
)
338342
else:
339343
feature_sql = f'{feature_sql}("{feature.name}") AS "{feature.name}"'
340344

sdk/python/feast/infra/offline_stores/snowflake_source.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -264,18 +264,17 @@ def get_table_column_names_and_types(
264264
]
265265
else:
266266
raise NotImplementedError(
267-
"Numbers larger than INT64 are not supported"
267+
"NaNs or Numbers larger than INT64 are not supported"
268268
)
269269
else:
270-
raise NotImplementedError(
271-
"The following Snowflake Data Type is not supported: DECIMAL -- Convert to DOUBLE"
272-
)
273-
elif row["type_code"] in [3, 5, 9, 10, 12]:
270+
row["snowflake_type"] = "NUMBERwSCALE"
271+
272+
elif row["type_code"] in [5, 9, 10, 12]:
274273
error = snowflake_unsupported_map[row["type_code"]]
275274
raise NotImplementedError(
276275
f"The following Snowflake Data Type is not supported: {error}"
277276
)
278-
elif row["type_code"] in [1, 2, 4, 6, 7, 8, 11, 13]:
277+
elif row["type_code"] in [1, 2, 3, 4, 6, 7, 8, 11, 13]:
279278
row["snowflake_type"] = snowflake_type_code_map[row["type_code"]]
280279
else:
281280
raise NotImplementedError(
@@ -291,6 +290,7 @@ def get_table_column_names_and_types(
291290
0: "NUMBER",
292291
1: "DOUBLE",
293292
2: "VARCHAR",
293+
3: "DATE",
294294
4: "TIMESTAMP",
295295
6: "TIMESTAMP_LTZ",
296296
7: "TIMESTAMP_TZ",
@@ -300,7 +300,6 @@ def get_table_column_names_and_types(
300300
}
301301

302302
snowflake_unsupported_map = {
303-
3: "DATE -- Convert to TIMESTAMP",
304303
5: "VARIANT -- Try converting to VARCHAR",
305304
9: "OBJECT -- Try converting to VARCHAR",
306305
10: "ARRAY -- Try converting to VARCHAR",

sdk/python/feast/type_map.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,8 +625,10 @@ def snowflake_type_to_feast_value_type(snowflake_type: str) -> ValueType:
625625
"VARCHAR": ValueType.STRING,
626626
"NUMBER32": ValueType.INT32,
627627
"NUMBER64": ValueType.INT64,
628+
"NUMBERwSCALE": ValueType.DOUBLE,
628629
"DOUBLE": ValueType.DOUBLE,
629630
"BOOLEAN": ValueType.BOOL,
631+
"DATE": ValueType.UNIX_TIMESTAMP,
630632
"TIMESTAMP": ValueType.UNIX_TIMESTAMP,
631633
"TIMESTAMP_TZ": ValueType.UNIX_TIMESTAMP,
632634
"TIMESTAMP_LTZ": ValueType.UNIX_TIMESTAMP,

0 commit comments

Comments
 (0)