This is an automated email from the ASF dual-hosted git repository.

morrysnow pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.1 by this push:
     new 721aefce735 branch-3.1: [fix](paimon) disable some query type of 
paimon #54639 (#54660)
721aefce735 is described below

commit 721aefce7354446e8ec52a433940333a97b14b5d
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Aug 14 17:36:31 2025 +0800

    branch-3.1: [fix](paimon) disable some query type of paimon #54639 (#54660)
    
    Cherry-picked from #54639
    
    Co-authored-by: Mingyu Chen (Rayner) <[email protected]>
---
 .../doris/datasource/paimon/source/PaimonScanNode.java |  10 +++++++++-
 .../datasource/paimon/source/PaimonScanNodeTest.java   |  10 +++++-----
 .../data/external_table_p0/paimon/paimon_incr_read.out | Bin 1097 -> 943 bytes
 .../external_table_p0/paimon/paimon_incr_read.groovy   |  14 ++++++++++++--
 4 files changed, 26 insertions(+), 8 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/source/PaimonScanNode.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/source/PaimonScanNode.java
index 7eca8bba25e..aa1967a92b1 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/source/PaimonScanNode.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/source/PaimonScanNode.java
@@ -374,6 +374,13 @@ public class PaimonScanNode extends FileQueryScanNode {
                                 .indexOf(slot.getColumn().getName()))
                 .toArray();
         Table paimonTable = source.getPaimonTable();
+
+        if (getScanParams() != null && getQueryTableSnapshot() != null) {
+            throw new UserException("Can not specify scan params and table 
snapshot at same time.");
+        }
+        if (getQueryTableSnapshot() != null) {
+            throw new UserException("Paimon table does not support table 
snapshot query yet.");
+        }
         Map<String, String> incrReadParams = getIncrReadParams();
         paimonTable = paimonTable.copy(incrReadParams);
         ReadBuilder readBuilder = paimonTable.newReadBuilder();
@@ -619,7 +626,7 @@ public class PaimonScanNode extends FileQueryScanNode {
             paimonScanParams.put(PAIMON_SCAN_MODE, null);
             if (hasStartSnapshotId && !hasEndSnapshotId) {
                 // Only startSnapshotId is specified
-                paimonScanParams.put(PAIMON_SCAN_SNAPSHOT_ID, 
params.get(DORIS_START_SNAPSHOT_ID));
+                throw new UserException("endSnapshotId is required when using 
snapshot-based incremental read");
             } else if (hasStartSnapshotId && hasEndSnapshotId) {
                 // Both start and end snapshot IDs are specified
                 String startSId = params.get(DORIS_START_SNAPSHOT_ID);
@@ -651,3 +658,4 @@ public class PaimonScanNode extends FileQueryScanNode {
     }
 }
 
+
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/datasource/paimon/source/PaimonScanNodeTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/datasource/paimon/source/PaimonScanNodeTest.java
index c0d1370673f..8c5eba43991 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/datasource/paimon/source/PaimonScanNodeTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/datasource/paimon/source/PaimonScanNodeTest.java
@@ -19,6 +19,7 @@ package org.apache.doris.datasource.paimon.source;
 
 import org.apache.doris.analysis.TupleDescriptor;
 import org.apache.doris.analysis.TupleId;
+import org.apache.doris.common.ExceptionChecker;
 import org.apache.doris.common.UserException;
 import org.apache.doris.datasource.CatalogProperty;
 import org.apache.doris.datasource.paimon.PaimonFileExternalCatalog;
@@ -135,16 +136,15 @@ public class PaimonScanNodeTest {
         // 1. Only startSnapshotId
         Map<String, String> params = new HashMap<>();
         params.put("startSnapshotId", "5");
-        Map<String, String> result = 
PaimonScanNode.validateIncrementalReadParams(params);
-        Assert.assertEquals("5", result.get("scan.snapshot-id"));
-        Assert.assertNull(result.get("scan.mode"));
-        Assert.assertEquals(2, result.size());
+        ExceptionChecker.expectThrowsWithMsg(UserException.class,
+                "endSnapshotId is required when using snapshot-based 
incremental read",
+                () -> PaimonScanNode.validateIncrementalReadParams(params));
 
         // 2. Both startSnapshotId and endSnapshotId
         params.clear();
         params.put("startSnapshotId", "1");
         params.put("endSnapshotId", "5");
-        result = PaimonScanNode.validateIncrementalReadParams(params);
+        Map<String, String> result = 
PaimonScanNode.validateIncrementalReadParams(params);
         Assert.assertEquals("1,5", result.get("incremental-between"));
         Assert.assertTrue(result.containsKey("scan.mode") && 
result.get("scan.mode") == null);
         Assert.assertEquals(3, result.size());
diff --git a/regression-test/data/external_table_p0/paimon/paimon_incr_read.out 
b/regression-test/data/external_table_p0/paimon/paimon_incr_read.out
index 6472ab41b64..6d776ec8df8 100644
Binary files 
a/regression-test/data/external_table_p0/paimon/paimon_incr_read.out and 
b/regression-test/data/external_table_p0/paimon/paimon_incr_read.out differ
diff --git 
a/regression-test/suites/external_table_p0/paimon/paimon_incr_read.groovy 
b/regression-test/suites/external_table_p0/paimon/paimon_incr_read.groovy
index cfe9fbf8960..f32120f2ea7 100644
--- a/regression-test/suites/external_table_p0/paimon/paimon_incr_read.groovy
+++ b/regression-test/suites/external_table_p0/paimon/paimon_incr_read.groovy
@@ -43,8 +43,6 @@ suite("test_paimon_incr_read", 
"p0,external,doris,external_docker,external_docke
 
         def test_incr_read = { String force ->
             sql """ set force_jni_scanner=${force} """
-            order_qt_snapshot_incr1  """select * from 
paimon_incr@incr('startSnapshotId'=1)"""
-            order_qt_snapshot_incr2  """select * from 
paimon_incr@incr('startSnapshotId'=2)"""
             order_qt_snapshot_incr3  """select * from 
paimon_incr@incr('startSnapshotId'=1, 'endSnapshotId'=2)"""
             order_qt_snapshot_incr4  """select * from 
paimon_incr@incr('startSnapshotId'=1, 'endSnapshotId'=3)"""
             order_qt_snapshot_incr5  """select * from 
paimon_incr@incr('startSnapshotId'=2, 'endSnapshotId'=3)"""
@@ -90,6 +88,18 @@ suite("test_paimon_incr_read", 
"p0,external,doris,external_docker,external_docke
                 sql """select * from paimon_incr@incr('startSnapshotId'=1, 
'endSnapshotId'=1)"""
                 exception "startSnapshotId must be less than endSnapshotId"
             }
+            test {
+                sql """select * from paimon_incr@incr('startSnapshotId'=1)"""
+                exception "endSnapshotId is required when using snapshot-based 
incremental read"
+            }
+            test {
+                sql """select * from paimon_incr@incr('startSnapshotId'=1, 
'endSnapshotId'=2) for version as of 1"""
+                exception "Can not specify scan params and table snapshot"
+            }
+            test {
+                sql """select * from paimon_incr for version as of 1"""
+                exception "Paimon table does not support table snapshot query 
yet"
+            }
         }
 
         test_incr_read("false")


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to