diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/BaseScriptTransformationExec.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/BaseScriptTransformationExec.scala index fc3a124e7f..60400506f9 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/BaseScriptTransformationExec.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/BaseScriptTransformationExec.scala @@ -220,6 +220,9 @@ trait BaseScriptTransformationExec extends UnaryExecNode { UTF8String.fromString(data), DateTimeUtils.getZoneId(conf.sessionLocalTimeZone)) .map(DateTimeUtils.toJavaTimestamp).orNull, converter) + case TimestampNTZType => + wrapperConvertException(data => DateTimeUtils.stringToTimestampWithoutTimeZone( + UTF8String.fromString(data)).map(DateTimeUtils.microsToLocalDateTime).orNull, converter) case CalendarIntervalType => wrapperConvertException( data => IntervalUtils.stringToInterval(UTF8String.fromString(data)), converter) diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/BaseScriptTransformationSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/BaseScriptTransformationSuite.scala index 9d8fcdac3f..488a0fdce2 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/BaseScriptTransformationSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/BaseScriptTransformationSuite.scala @@ -654,6 +654,20 @@ abstract class BaseScriptTransformationSuite extends SparkPlanTest with SQLTestU df.select($"ym", $"dt").collect()) } } + + test("SPARK-36675: TRANSFORM should support timestamp_ntz (no serde)") { + val df = spark.sql("SELECT timestamp_ntz'2021-09-06 20:19:13' col") + checkAnswer( + df, + (child: SparkPlan) => createScriptTransformationExec( + script = "cat", + output = Seq( + AttributeReference("col", TimestampNTZType)()), + child = child, + ioschema = defaultIOSchema + ), + df.select($"col").collect()) + } } case class ExceptionInjectingOperator(child: SparkPlan) extends UnaryExecNode {