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 f00d675f3750..33cd45a351a4 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 @@ -185,7 +185,7 @@ public TypeInfo visit(TimestampType timestampType) { @Override public TypeInfo visit(LocalZonedTimestampType localZonedTimestampType) { - return LocalZonedTimestampTypeUtils.toHiveType(localZonedTimestampType); + return LocalZonedTimestampTypeUtils.hiveLocalZonedTimestampType(); } @Override @@ -254,7 +254,7 @@ static DataType visit(TypeInfo type, HiveToPaimonTypeVisitor visitor) { } public DataType atomic(TypeInfo atomic) { - if (LocalZonedTimestampTypeUtils.isLocalZonedTimestampType(atomic)) { + if (LocalZonedTimestampTypeUtils.isHiveLocalZonedTimestampType(atomic)) { return DataTypes.TIMESTAMP_WITH_LOCAL_TIME_ZONE(); } diff --git a/paimon-hive/paimon-hive-common/src/main/java/org/apache/paimon/hive/LocalZonedTimestampTypeUtils.java b/paimon-hive/paimon-hive-common/src/main/java/org/apache/paimon/hive/LocalZonedTimestampTypeUtils.java index fe76debfc333..b143fcd8caec 100644 --- a/paimon-hive/paimon-hive-common/src/main/java/org/apache/paimon/hive/LocalZonedTimestampTypeUtils.java +++ b/paimon-hive/paimon-hive-common/src/main/java/org/apache/paimon/hive/LocalZonedTimestampTypeUtils.java @@ -23,14 +23,27 @@ import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory; -/** To maintain compatibility with Hive 3. */ +import java.lang.reflect.Field; + +/** + * Utils to convert between Hive TimestampLocalTZTypeInfo and Paimon {@link + * LocalZonedTimestampType}, using reflection to solve compatibility between Hive 2 and Hive 3. + */ public class LocalZonedTimestampTypeUtils { - public static boolean isLocalZonedTimestampType(TypeInfo hiveTypeInfo) { - return false; + public static boolean isHiveLocalZonedTimestampType(TypeInfo hiveTypeInfo) { + return "org.apache.hadoop.hive.serde2.typeinfo.TimestampLocalTZTypeInfo" + .equals(hiveTypeInfo.getClass().getName()); } - public static TypeInfo toHiveType(LocalZonedTimestampType paimonType) { - return TypeInfoFactory.timestampTypeInfo; + public static TypeInfo hiveLocalZonedTimestampType() { + try { + Class typeInfoFactoryClass = + Class.forName("org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory"); + Field field = typeInfoFactoryClass.getField("timestampLocalTZTypeInfo"); + return (TypeInfo) field.get(null); + } catch (Exception e) { + return TypeInfoFactory.timestampTypeInfo; + } } } diff --git a/paimon-hive/paimon-hive-connector-3.1/src/main/java/org/apache/paimon/hive/LocalZonedTimestampTypeUtils.java b/paimon-hive/paimon-hive-connector-3.1/src/main/java/org/apache/paimon/hive/LocalZonedTimestampTypeUtils.java deleted file mode 100644 index b7c5d26ae657..000000000000 --- a/paimon-hive/paimon-hive-connector-3.1/src/main/java/org/apache/paimon/hive/LocalZonedTimestampTypeUtils.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.paimon.hive; - -import org.apache.paimon.types.LocalZonedTimestampType; - -import org.apache.hadoop.hive.serde2.typeinfo.TimestampLocalTZTypeInfo; -import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo; -import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory; - -/** - * Utils to convert between Hive {@link TimestampLocalTZTypeInfo} and Paimon {@link - * LocalZonedTimestampType}. - */ -public class LocalZonedTimestampTypeUtils { - - public static boolean isLocalZonedTimestampType(TypeInfo hiveTypeInfo) { - return hiveTypeInfo instanceof TimestampLocalTZTypeInfo; - } - - public static TypeInfo toHiveType(LocalZonedTimestampType paimonType) { - return TypeInfoFactory.timestampLocalTZTypeInfo; - } -}