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/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new a8ba93e97e [spark] Fix merge into table with varchar type (#6192)
a8ba93e97e is described below
commit a8ba93e97eaaa2a46220c314b4c542959932d0b9
Author: Zouxxyy <[email protected]>
AuthorDate: Wed Sep 3 21:30:17 2025 +0800
[spark] Fix merge into table with varchar type (#6192)
---
.../paimon/spark/commands/MergeIntoPaimonTable.scala | 4 +---
.../paimon/spark/sql/MergeIntoTableTestBase.scala | 18 ++++++++++++++++++
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git
a/paimon-spark/paimon-spark-common/src/main/scala/org/apache/paimon/spark/commands/MergeIntoPaimonTable.scala
b/paimon-spark/paimon-spark-common/src/main/scala/org/apache/paimon/spark/commands/MergeIntoPaimonTable.scala
index 3697b4c695..3e8d4deabe 100644
---
a/paimon-spark/paimon-spark-common/src/main/scala/org/apache/paimon/spark/commands/MergeIntoPaimonTable.scala
+++
b/paimon-spark/paimon-spark-common/src/main/scala/org/apache/paimon/spark/commands/MergeIntoPaimonTable.scala
@@ -58,8 +58,6 @@ case class MergeIntoPaimonTable(
lazy val relation: DataSourceV2Relation =
PaimonRelation.getPaimonRelation(targetTable)
- lazy val tableSchema: StructType = v2Table.schema
-
private lazy val (targetOnlyCondition, filteredTargetPlan):
(Option[Expression], LogicalPlan) = {
val filtersOnlyTarget = getExpressionOnlyRelated(mergeCondition,
targetTable)
(
@@ -281,7 +279,7 @@ case class MergeIntoPaimonTable(
val matchedOutputs = processMergeActions(matchedActions)
val notMatchedBySourceOutputs =
processMergeActions(notMatchedBySourceActions)
val notMatchedOutputs = processMergeActions(notMatchedActions)
- val outputFields = mutable.ArrayBuffer(tableSchema.fields: _*)
+ val outputFields = mutable.ArrayBuffer(targetTable.schema.fields: _*)
if (writeRowLineage) {
outputFields += PaimonMetadataColumn.ROW_ID.toStructField
outputFields += PaimonMetadataColumn.SEQUENCE_NUMBER.toStructField
diff --git
a/paimon-spark/paimon-spark-ut/src/test/scala/org/apache/paimon/spark/sql/MergeIntoTableTestBase.scala
b/paimon-spark/paimon-spark-ut/src/test/scala/org/apache/paimon/spark/sql/MergeIntoTableTestBase.scala
index f7e1f73afb..4564e1646c 100644
---
a/paimon-spark/paimon-spark-ut/src/test/scala/org/apache/paimon/spark/sql/MergeIntoTableTestBase.scala
+++
b/paimon-spark/paimon-spark-ut/src/test/scala/org/apache/paimon/spark/sql/MergeIntoTableTestBase.scala
@@ -653,6 +653,24 @@ abstract class MergeIntoTableTestBase extends
PaimonSparkTestBase with PaimonTab
)
}
}
+
+ test(s"Paimon MergeInto: merge into with varchar") {
+ withTable("source", "target") {
+ createTable("source", "a INT, b VARCHAR(32)", Seq("a"))
+ createTable("target", "a INT, b VARCHAR(32)", Seq("a"))
+ sql("INSERT INTO target values (1, 'Alice'), (2, 'Bob')")
+ sql("INSERT INTO source values (1, 'Eve'), (3, 'Cat')")
+
+ sql(s"""
+ |MERGE INTO target
+ |USING source
+ |ON target.a = source.a
+ |WHEN MATCHED THEN
+ |UPDATE SET a = source.a, b = source.b
+ |""".stripMargin)
+ checkAnswer(sql("SELECT * FROM target ORDER BY a, b"), Seq(Row(1,
"Eve"), Row(2, "Bob")))
+ }
+ }
}
trait MergeIntoPrimaryKeyTableTest extends PaimonSparkTestBase with
PaimonPrimaryKeyTable {