This is an automated email from the ASF dual-hosted git repository.

JingsongLi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new 1ba6d371e9 [hive] Fix Hive timestamp mapped to Paimon millisecond 
precision (#8643)
1ba6d371e9 is described below

commit 1ba6d371e9157821ca039f13e11a6e9317f62458
Author: Eunbin Son <[email protected]>
AuthorDate: Thu Jul 23 22:08:54 2026 +0900

    [hive] Fix Hive timestamp mapped to Paimon millisecond precision (#8643)
---
 .../java/org/apache/paimon/hive/HiveTypeUtils.java |  2 +-
 .../org/apache/paimon/hive/HiveTypeUtilsTest.java  | 22 ++++++++++++++++++++++
 .../hive/HiveCatalogFormatTableITCaseBase.java     |  2 +-
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git 
a/paimon-hive/paimon-hive-common/src/main/java/org/apache/paimon/hive/HiveTypeUtils.java
 
b/paimon-hive/paimon-hive-common/src/main/java/org/apache/paimon/hive/HiveTypeUtils.java
index 23c01d1144..2e63570e3c 100644
--- 
a/paimon-hive/paimon-hive-common/src/main/java/org/apache/paimon/hive/HiveTypeUtils.java
+++ 
b/paimon-hive/paimon-hive-common/src/main/java/org/apache/paimon/hive/HiveTypeUtils.java
@@ -310,7 +310,7 @@ public class HiveTypeUtils {
             } else if (TypeInfoFactory.dateTypeInfo.equals(atomic)) {
                 return DataTypes.DATE();
             } else if (TypeInfoFactory.timestampTypeInfo.equals(atomic)) {
-                return DataTypes.TIMESTAMP_MILLIS();
+                return DataTypes.TIMESTAMP();
             }
 
             throw new UnsupportedOperationException(
diff --git 
a/paimon-hive/paimon-hive-common/src/test/java/org/apache/paimon/hive/HiveTypeUtilsTest.java
 
b/paimon-hive/paimon-hive-common/src/test/java/org/apache/paimon/hive/HiveTypeUtilsTest.java
index cef807d341..27fab307df 100644
--- 
a/paimon-hive/paimon-hive-common/src/test/java/org/apache/paimon/hive/HiveTypeUtilsTest.java
+++ 
b/paimon-hive/paimon-hive-common/src/test/java/org/apache/paimon/hive/HiveTypeUtilsTest.java
@@ -20,8 +20,11 @@ package org.apache.paimon.hive;
 
 import org.apache.paimon.types.CharType;
 import org.apache.paimon.types.DataField;
+import org.apache.paimon.types.DataType;
 import org.apache.paimon.types.DataTypes;
 import org.apache.paimon.types.IntType;
+import org.apache.paimon.types.LocalZonedTimestampType;
+import org.apache.paimon.types.TimestampType;
 import org.apache.paimon.types.VarCharType;
 
 import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
@@ -104,4 +107,23 @@ public class HiveTypeUtilsTest {
                 
HiveTypeUtils.toTypeInfo(DataTypes.TIMESTAMP_WITH_LOCAL_TIME_ZONE());
         
assertThat(timestampWithLocalZoneTypeInfo.getTypeName()).isEqualTo("timestamp");
     }
+
+    @Test
+    public void testToPaimonTypeTimestampPrecision() {
+        // Hive `timestamp` maps to Paimon TIMESTAMP with the default 
precision, not the
+        // millisecond precision (3) which silently truncates sub-millisecond 
values when a
+        // Hive schema is inferred into Paimon (migrate/clone/CREATE via Hive).
+        DataType timestamp = HiveTypeUtils.toPaimonType("timestamp");
+        assertThat(timestamp).isEqualTo(DataTypes.TIMESTAMP());
+        assertThat(((TimestampType) timestamp).getPrecision())
+                .isEqualTo(TimestampType.DEFAULT_PRECISION);
+
+        // Parity: the sibling local-zoned timestamp reverse path returns
+        // DataTypes.TIMESTAMP_WITH_LOCAL_TIME_ZONE(), which carries the same 
default
+        // precision (SparkTypeUtils maps timestamp to precision 6 as well).
+        assertThat(((TimestampType) timestamp).getPrecision())
+                .isEqualTo(LocalZonedTimestampType.DEFAULT_PRECISION);
+        assertThat(((TimestampType) timestamp).getPrecision())
+                
.isEqualTo(DataTypes.TIMESTAMP_WITH_LOCAL_TIME_ZONE().getPrecision());
+    }
 }
diff --git 
a/paimon-hive/paimon-hive-connector-common/src/test/java/org/apache/paimon/hive/HiveCatalogFormatTableITCaseBase.java
 
b/paimon-hive/paimon-hive-connector-common/src/test/java/org/apache/paimon/hive/HiveCatalogFormatTableITCaseBase.java
index 2af00a7154..82a4389ef0 100644
--- 
a/paimon-hive/paimon-hive-connector-common/src/test/java/org/apache/paimon/hive/HiveCatalogFormatTableITCaseBase.java
+++ 
b/paimon-hive/paimon-hive-connector-common/src/test/java/org/apache/paimon/hive/HiveCatalogFormatTableITCaseBase.java
@@ -213,7 +213,7 @@ public abstract class HiveCatalogFormatTableITCaseBase {
         assertThat(descResult)
                 .containsExactly(
                         "+I[a, INT, true, null, null, null, comment a]",
-                        "+I[b, TIMESTAMP(3), true, null, null, null, comment 
b]");
+                        "+I[b, TIMESTAMP(6), true, null, null, null, comment 
b]");
         hiveShell.execute(
                 String.format(
                         "INSERT INTO %s VALUES (1, '2025-03-17 10:15:30'), (2, 
'2025-03-18 10:15:30')",

Reply via email to