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]