diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/client/HiveClientImpl.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/client/HiveClientImpl.scala index b1c83af228..edb1c125f5 100644 --- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/client/HiveClientImpl.scala +++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/client/HiveClientImpl.scala @@ -999,8 +999,11 @@ private[hive] object HiveClientImpl extends Logging { // For Hive Serde, we still need to to restore the raw type for char and varchar type. // When reading data in parquet, orc, or avro file format with string type for char, // the tailing spaces may lost if we are not going to pad it. - val typeString = CharVarcharUtils.getRawTypeString(c.metadata) - .getOrElse(c.dataType.catalogString) + val typeString = if (SQLConf.get.charVarcharAsString) { + c.dataType.catalogString + } else { + CharVarcharUtils.getRawTypeString(c.metadata).getOrElse(c.dataType.catalogString) + } new FieldSchema(c.name, typeString, c.getComment().orNull) } diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/HiveCharVarcharTestSuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/HiveCharVarcharTestSuite.scala index 48406d99a5..182047a8c6 100644 --- a/sql/hive/src/test/scala/org/apache/spark/sql/HiveCharVarcharTestSuite.scala +++ b/sql/hive/src/test/scala/org/apache/spark/sql/HiveCharVarcharTestSuite.scala @@ -59,6 +59,20 @@ class HiveCharVarcharTestSuite extends CharVarcharTestSuite with TestHiveSinglet checkAnswer(sql("SELECT v from t where c = 'Spark' and v = 'kyuubi'"), Row("kyuubi")) } } + + test("SPARK-36552: Fix different behavior of writing char/varchar to hive and datasource table") { + Seq("true", "false").foreach { v => + withSQLConf( + "spark.sql.hive.convertMetastoreParquet" -> v, + "spark.sql.legacy.charVarcharAsString" -> "true") { + withTable("t") { + sql(s"CREATE TABLE t (c varchar(2)) USING $format") + sql("INSERT INTO t SELECT 'kyuubi'") + checkAnswer(sql("SELECT c from t"), Row("kyuubi")) + } + } + } + } } class HiveCharVarcharDDLTestSuite extends CharVarcharDDLTestBase with TestHiveSingleton {