This is an automated email from the ASF dual-hosted git repository.
JingsongLi 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 7298f93ebb [spark] Fix remove_unexisting_files on empty table (#8697)
7298f93ebb is described below
commit 7298f93ebba87fd0f11d88f2b15ea5365276a663
Author: huangxiaoping <[email protected]>
AuthorDate: Thu Jul 16 22:05:28 2026 +0800
[spark] Fix remove_unexisting_files on empty table (#8697)
---
.../spark/procedure/SparkRemoveUnexistingFiles.scala | 7 ++++++-
.../procedure/RemoveUnexistingFilesProcedureTest.scala | 16 ++++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git
a/paimon-spark/paimon-spark-common/src/main/scala/org/apache/paimon/spark/procedure/SparkRemoveUnexistingFiles.scala
b/paimon-spark/paimon-spark-common/src/main/scala/org/apache/paimon/spark/procedure/SparkRemoveUnexistingFiles.scala
index 1c27fc1d2a..cf55668737 100644
---
a/paimon-spark/paimon-spark-common/src/main/scala/org/apache/paimon/spark/procedure/SparkRemoveUnexistingFiles.scala
+++
b/paimon-spark/paimon-spark-common/src/main/scala/org/apache/paimon/spark/procedure/SparkRemoveUnexistingFiles.scala
@@ -27,6 +27,7 @@ import org.apache.paimon.table.FileStoreTable
import org.apache.paimon.table.sink.{CommitMessage, CommitMessageImpl,
CommitMessageSerializer}
import org.apache.spark.internal.Logging
+import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{PaimonSparkSession, SparkSession}
import org.apache.spark.sql.catalyst.SQLConfHelper
@@ -43,8 +44,12 @@ case class SparkRemoveUnexistingFiles(
extends SQLConfHelper
with Logging {
- private def buildRDD() = {
+ private def buildRDD(): RDD[String] = {
val binaryPartitions = table.newScan().listPartitions()
+ if (binaryPartitions.isEmpty) {
+ return spark.sparkContext.emptyRDD[String]
+ }
+
val realParallelism = Math.min(binaryPartitions.size(), parallelism)
val numPartitionFields = table.schema().partitionKeys().size()
diff --git
a/paimon-spark/paimon-spark-ut/src/test/scala/org/apache/paimon/spark/procedure/RemoveUnexistingFilesProcedureTest.scala
b/paimon-spark/paimon-spark-ut/src/test/scala/org/apache/paimon/spark/procedure/RemoveUnexistingFilesProcedureTest.scala
index b6b72806d1..afa7963182 100644
---
a/paimon-spark/paimon-spark-ut/src/test/scala/org/apache/paimon/spark/procedure/RemoveUnexistingFilesProcedureTest.scala
+++
b/paimon-spark/paimon-spark-ut/src/test/scala/org/apache/paimon/spark/procedure/RemoveUnexistingFilesProcedureTest.scala
@@ -25,6 +25,21 @@ import java.util.UUID
class RemoveUnexistingFilesProcedureTest extends PaimonSparkTestBase {
+ test("Paimon procedure: remove unexisting files on empty table") {
+ spark.sql("CREATE DATABASE IF NOT EXISTS mydb")
+ try {
+ spark.sql("CREATE TABLE mydb.t_empty (id INT) USING paimon")
+
+ checkAnswer(
+ spark.sql("CALL sys.remove_unexisting_files(table => 'mydb.t_empty',
dry_run => true)"),
+ Nil)
+
+ checkAnswer(spark.sql("CALL sys.remove_unexisting_files(table =>
'mydb.t_empty')"), Nil)
+ } finally {
+ spark.sql("DROP TABLE IF EXISTS mydb.t_empty")
+ }
+ }
+
test("Paimon procedure: remove unexisting files, bucket = -1") {
testImpl(-1)
}
@@ -51,6 +66,7 @@ class RemoveUnexistingFilesProcedureTest extends
PaimonSparkTestBase {
val actual = new Array[Int](numPartitions)
val pattern = "pt=(\\d+?)/".r
+ spark.sql("CREATE DATABASE IF NOT EXISTS mydb")
spark.sql(s"USE mydb")
spark
.sql(s"CALL sys.remove_unexisting_files(table => '$tableName', dry_run
=> true)")