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

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


The following commit(s) were added to refs/heads/master by this push:
     new 6bdcdd865 [hive] Fix the issue of type conversion error from Paimon to 
Hive type (#1568)
6bdcdd865 is described below

commit 6bdcdd8655673a0a51b8305ba6eb35439ef705f5
Author: ZhouJinsong <[email protected]>
AuthorDate: Mon Jul 17 11:57:03 2023 +0800

    [hive] Fix the issue of type conversion error from Paimon to Hive type 
(#1568)
---
 .../src/main/java/org/apache/paimon/hive/HiveTypeUtils.java    | 10 ++++++++--
 .../test/java/org/apache/paimon/hive/HiveTypeUtilsTest.java    |  9 +++++++++
 2 files changed, 17 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 da2bffc0d..f147af71d 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
@@ -28,6 +28,8 @@ import org.apache.paimon.types.MapType;
 import org.apache.paimon.types.RowType;
 import org.apache.paimon.types.VarCharType;
 
+import org.apache.hadoop.hive.common.type.HiveChar;
+import org.apache.hadoop.hive.common.type.HiveVarchar;
 import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo;
 import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo;
 import org.apache.hadoop.hive.serde2.typeinfo.ListTypeInfo;
@@ -75,10 +77,14 @@ public class HiveTypeUtils {
                         decimalType.getPrecision(), decimalType.getScale());
             case CHAR:
                 CharType charType = (CharType) logicalType;
-                return TypeInfoFactory.getCharTypeInfo(charType.getLength());
+                if (charType.getLength() > HiveChar.MAX_CHAR_LENGTH) {
+                    return TypeInfoFactory.stringTypeInfo;
+                } else {
+                    return 
TypeInfoFactory.getCharTypeInfo(charType.getLength());
+                }
             case VARCHAR:
                 VarCharType varCharType = (VarCharType) logicalType;
-                if (varCharType.getLength() == VarCharType.MAX_LENGTH) {
+                if (varCharType.getLength() > HiveVarchar.MAX_VARCHAR_LENGTH) {
                     return TypeInfoFactory.stringTypeInfo;
                 } else {
                     return 
TypeInfoFactory.getVarcharTypeInfo(varCharType.getLength());
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 ff5b1e9b3..590cc950d 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
@@ -18,6 +18,7 @@
 
 package org.apache.paimon.hive;
 
+import org.apache.paimon.types.CharType;
 import org.apache.paimon.types.DataField;
 import org.apache.paimon.types.DataTypes;
 import org.apache.paimon.types.IntType;
@@ -63,9 +64,17 @@ public class HiveTypeUtilsTest {
         TypeInfo charTypeInfo = 
HiveTypeUtils.logicalTypeToTypeInfo(DataTypes.CHAR(1));
         assertThat(charTypeInfo.getTypeName()).isEqualTo("char(1)");
 
+        TypeInfo maxLengthCharType =
+                
HiveTypeUtils.logicalTypeToTypeInfo(DataTypes.CHAR(CharType.MAX_LENGTH));
+        assertThat(maxLengthCharType.getTypeName()).isEqualTo("string");
+
         TypeInfo varcharTypeInfo = 
HiveTypeUtils.logicalTypeToTypeInfo(DataTypes.VARCHAR(10));
         assertThat(varcharTypeInfo.getTypeName()).isEqualTo("varchar(10)");
 
+        TypeInfo maxLengthVarcharType =
+                
HiveTypeUtils.logicalTypeToTypeInfo(DataTypes.VARCHAR(VarCharType.MAX_LENGTH));
+        assertThat(maxLengthVarcharType.getTypeName()).isEqualTo("string");
+
         TypeInfo binaryTypeInfo = 
HiveTypeUtils.logicalTypeToTypeInfo(DataTypes.BINARY(10));
         assertThat(binaryTypeInfo.getTypeName()).isEqualTo("binary");
 

Reply via email to