From abeb1f9c36182fb157e106d99f114529c1c6e5bc Mon Sep 17 00:00:00 2001 From: Maksim Zinal Date: Sun, 22 Dec 2024 17:41:02 +0300 Subject: [PATCH] fixed timestamp conversions --- pom.xml | 2 +- .../java/tech/ydb/spark/connector/YdbTypes.java | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index cf73609..136c7f2 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ tech.ydb ydb-sdk-bom - 2.3.6 + 2.3.8-SNAPSHOT pom import diff --git a/src/main/java/tech/ydb/spark/connector/YdbTypes.java b/src/main/java/tech/ydb/spark/connector/YdbTypes.java index aa3366f..48240e1 100644 --- a/src/main/java/tech/ydb/spark/connector/YdbTypes.java +++ b/src/main/java/tech/ydb/spark/connector/YdbTypes.java @@ -11,6 +11,7 @@ import java.time.format.DateTimeParseException; import java.util.Map; +import org.apache.spark.sql.catalyst.util.DateTimeUtils; import org.apache.spark.sql.types.DataType; import org.apache.spark.sql.types.DataTypes; import org.apache.spark.sql.types.Decimal; @@ -32,6 +33,8 @@ */ public final class YdbTypes implements Serializable { + private static final org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(YdbTypes.class); + private static final long serialVersionUID = 1L; public static final DataType SPARK_DECIMAL = DataTypes.createDecimalType(38, 10); @@ -604,9 +607,8 @@ private Value convertTimestampToYdb(Object v, YdbFieldType t) { if (v == null) { return PrimitiveType.Timestamp.makeOptional().emptyValue(); } - if (v instanceof Number) { - return PrimitiveValue.newTimestamp( - Instant.ofEpochMilli(((Number) v).longValue() / 1000L)); + if (v instanceof Long) { + return PrimitiveValue.newTimestamp(DateTimeUtils.microsToInstant((Long) v)); } try { if (v instanceof String || v instanceof UTF8String) { @@ -624,9 +626,8 @@ private Value convertDatetimeToYdb(Object v, YdbFieldType t) { if (v instanceof java.sql.Timestamp) { return PrimitiveValue.newDatetime(((java.sql.Timestamp) v).toInstant()); } - if (v instanceof Number) { - return PrimitiveValue.newDatetime( - Instant.ofEpochMilli(((Number) v).longValue() / 1000L)); + if (v instanceof Long) { + return PrimitiveValue.newDatetime(DateTimeUtils.microsToInstant((Long) v)); } try { if (v instanceof String || v instanceof UTF8String) {