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 be5f218a7 [core] Fix push down limit data correctness issue with 
deletion vector (#4296)
be5f218a7 is described below

commit be5f218a7a9ea111d787d2b5e3bb5f154dae25e6
Author: Xiduo You <[email protected]>
AuthorDate: Wed Oct 9 21:47:11 2024 +0800

    [core] Fix push down limit data correctness issue with deletion vector 
(#4296)
---
 .../apache/paimon/table/source/DataTableBatchScan.java   |  9 +++++++--
 .../org/apache/paimon/spark/sql/PaimonPushDownTest.scala | 16 ++++++++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/table/source/DataTableBatchScan.java
 
b/paimon-core/src/main/java/org/apache/paimon/table/source/DataTableBatchScan.java
index 93ab5ba16..29baac9a5 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/table/source/DataTableBatchScan.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/table/source/DataTableBatchScan.java
@@ -28,6 +28,7 @@ import 
org.apache.paimon.table.source.snapshot.StartingScanner.ScannedResult;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 import static org.apache.paimon.CoreOptions.MergeEngine.FIRST_ROW;
 
@@ -114,10 +115,14 @@ public class DataTableBatchScan extends 
AbstractDataTableScan {
     }
 
     /**
-     * 0 represents that we can't compute the row count of this split, 'cause 
this split needs to be
-     * merged.
+     * 0 represents that we can't compute the row count of this split: 1. the 
split needs to be
+     * merged; 2. the table enabled deletion vector and there are some 
deletion files.
      */
     private long getRowCountForSplit(DataSplit split) {
+        if (split.deletionFiles().isPresent()
+                && 
split.deletionFiles().get().stream().anyMatch(Objects::nonNull)) {
+            return 0L;
+        }
         return split.convertToRawFiles()
                 .map(files -> 
files.stream().map(RawFile::rowCount).reduce(Long::sum).orElse(0L))
                 .orElse(0L);
diff --git 
a/paimon-spark/paimon-spark-common/src/test/scala/org/apache/paimon/spark/sql/PaimonPushDownTest.scala
 
b/paimon-spark/paimon-spark-common/src/test/scala/org/apache/paimon/spark/sql/PaimonPushDownTest.scala
index c55ed876d..8f62a5b33 100644
--- 
a/paimon-spark/paimon-spark-common/src/test/scala/org/apache/paimon/spark/sql/PaimonPushDownTest.scala
+++ 
b/paimon-spark/paimon-spark-common/src/test/scala/org/apache/paimon/spark/sql/PaimonPushDownTest.scala
@@ -86,6 +86,22 @@ class PaimonPushDownTest extends PaimonSparkTestBase {
     checkAnswer(spark.sql(q), Row(1, "a", "p1") :: Row(2, "b", "p1") :: Row(3, 
"c", "p2") :: Nil)
   }
 
+  test("Paimon pushDown: limit for append-only tables with deletion vector") {
+    withTable("dv_test") {
+      spark.sql(
+        """
+          |CREATE TABLE dv_test (c1 INT, c2 STRING)
+          |TBLPROPERTIES ('deletion-vectors.enabled' = 'true', 
'source.split.target-size' = '1')
+          |""".stripMargin)
+
+      spark.sql("insert into table dv_test values(1, 'a'),(2, 'b'),(3, 'c')")
+      assert(spark.sql("select * from dv_test limit 2").count() == 2)
+
+      spark.sql("delete from dv_test where c1 = 1")
+      assert(spark.sql("select * from dv_test limit 2").count() == 2)
+    }
+  }
+
   test("Paimon pushDown: limit for append-only tables") {
     spark.sql(s"""
                  |CREATE TABLE T (a INT, b STRING, c STRING)

Reply via email to