Visitar URL original
fix: Map SQL Server bigint to INT64 and float to DOUBLE · feast-dev/feast@6d15533 · GitHub
Skip to content

Commit 6d15533

Browse files
LuisFigueroaGntkathole
authored andcommitted
fix: Map SQL Server bigint to INT64 and float to DOUBLE
mssql_to_feast_value_type mapped bigint to FLOAT, so 64-bit integer columns were inferred as Float32 and lost precision above 2^24. It also mapped float to FLOAT, but SQL Server float defaults to float(53), an 8-byte double. real (float(24)) stays FLOAT. Signed-off-by: LuisFigueroaG <luis.h.figueroa.g@gmail.com>
1 parent 6b212f5 commit 6d15533

2 files changed

Lines changed: 11 additions & 2 deletions

File tree

‎sdk/python/feast/type_map.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1687,14 +1687,14 @@ def bq_to_feast_value_type(bq_type_as_str: str) -> ValueType:
16871687

16881688
def mssql_to_feast_value_type(mssql_type_as_str: str) -> ValueType:
16891689
type_map = {
1690-
"bigint": ValueType.FLOAT,
1690+
"bigint": ValueType.INT64,
16911691
"binary": ValueType.BYTES,
16921692
"bit": ValueType.BOOL,
16931693
"char": ValueType.STRING,
16941694
"date": ValueType.UNIX_TIMESTAMP,
16951695
"datetime": ValueType.UNIX_TIMESTAMP,
16961696
"datetimeoffset": ValueType.UNIX_TIMESTAMP,
1697-
"float": ValueType.FLOAT,
1697+
"float": ValueType.DOUBLE,
16981698
"int": ValueType.INT32,
16991699
"nchar": ValueType.STRING,
17001700
"nvarchar": ValueType.STRING,

‎sdk/python/tests/unit/test_type_map.py‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
arrow_to_pg_type,
1717
feast_value_type_to_pa,
1818
feast_value_type_to_python_type,
19+
mssql_to_feast_value_type,
1920
pa_to_athena_value_type,
2021
pa_to_feast_value_type,
2122
pa_to_redshift_value_type,
@@ -588,6 +589,14 @@ def test_pg_type_to_feast_value_type_real(self):
588589
assert pg_type_to_feast_value_type("real") == ValueType.FLOAT
589590
assert pg_type_to_feast_value_type("real[]") == ValueType.FLOAT_LIST
590591

592+
def test_mssql_to_feast_value_type_numeric_widths(self):
593+
"""SQL Server bigint is a 64-bit integer and float defaults to float(53),
594+
an 8-byte double, so neither may be narrowed to a 32-bit float."""
595+
assert mssql_to_feast_value_type("bigint") == ValueType.INT64
596+
assert mssql_to_feast_value_type("float") == ValueType.DOUBLE
597+
assert mssql_to_feast_value_type("real") == ValueType.FLOAT
598+
assert mssql_to_feast_value_type("int") == ValueType.INT32
599+
591600
def test_snowflake_variant_to_map(self):
592601
"""Test that Snowflake VARIANT/OBJECT types convert to ValueType.MAP."""
593602
assert snowflake_type_to_feast_value_type("VARIANT") == ValueType.MAP

0 commit comments

Comments
 (0)