diff --git a/pyiceberg/utils/schema_conversion.py b/pyiceberg/utils/schema_conversion.py index c73b3ada7d..81fb0ac32d 100644 --- a/pyiceberg/utils/schema_conversion.py +++ b/pyiceberg/utils/schema_conversion.py @@ -68,8 +68,9 @@ LOGICAL_FIELD_TYPE_MAPPING: Dict[Tuple[str, str], PrimitiveType] = { ("date", "int"): DateType(), + ("time-millis", "int"): TimeType(), ("time-micros", "long"): TimeType(), - ("timestamp-millis", "int"): TimestampType(), + ("timestamp-millis", "long"): TimestampType(), ("timestamp-micros", "long"): TimestampType(), ("uuid", "fixed"): UUIDType(), ("uuid", "string"): UUIDType(), diff --git a/tests/utils/test_schema_conversion.py b/tests/utils/test_schema_conversion.py index a5c45447ff..e8cfd98f61 100644 --- a/tests/utils/test_schema_conversion.py +++ b/tests/utils/test_schema_conversion.py @@ -34,6 +34,7 @@ StringType, StructType, TimestampType, + TimeType, UnknownType, UUIDType, ) @@ -341,8 +342,20 @@ def test_convert_uuid_fixed_type() -> None: assert actual == UUIDType() +def test_convert_time_millis_type() -> None: + avro_logical_type = {"type": "int", "logicalType": "time-millis"} + actual = AvroSchemaConversion()._convert_logical_type(avro_logical_type) + assert actual == TimeType() + + +def test_convert_time_micros_type() -> None: + avro_logical_type = {"type": "long", "logicalType": "time-micros"} + actual = AvroSchemaConversion()._convert_logical_type(avro_logical_type) + assert actual == TimeType() + + def test_convert_timestamp_millis_type() -> None: - avro_logical_type = {"type": "int", "logicalType": "timestamp-millis"} + avro_logical_type = {"type": "long", "logicalType": "timestamp-millis"} actual = AvroSchemaConversion()._convert_logical_type(avro_logical_type) assert actual == TimestampType()