This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new fb40871b070 [fix](explain) fix NPE when explain verbose with partition
batch mode (#40969)
fb40871b070 is described below
commit fb40871b0705ad7b792ac493b6ba2d336e6efe61
Author: Mingyu Chen <[email protected]>
AuthorDate: Tue Sep 24 13:55:05 2024 +0800
[fix](explain) fix NPE when explain verbose with partition batch mode
(#40969)
If trigger "fetching partition in batch mode" feature, the `explain
verbose` for external table may cause NPE.
Because in batch mode, the scan range is not initialized in plan phase.
```
org.apache.doris.common.NereidsException: errCode = 2, detailMessage =
java.lang.NullPointerException
at
org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:767)
~[doris-fe.jar:1.2-SNAPSHOT]
at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:591)
~[doris-fe.jar:1.2-SNAPSHOT]
at
org.apache.doris.qe.StmtExecutor.queryRetry(StmtExecutor.java:554)
~[doris-fe.jar:1.2-SNAPSHOT]
at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:544)
~[doris-fe.jar:1.2-SNAPSHOT]
at
org.apache.doris.qe.ConnectProcessor.executeQuery(ConnectProcessor.java:323)
~[doris-fe.jar:1.2-SNAPSHOT]
at
org.apache.doris.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:234)
~[doris-fe.jar:1.2-SNAPSHOT]
at
org.apache.doris.qe.MysqlConnectProcessor.handleQuery(MysqlConnectProcessor.java:194)
~[doris-fe.jar:1.2-SNAPSHOT]
at
org.apache.doris.qe.MysqlConnectProcessor.dispatch(MysqlConnectProcessor.java:222)
~[doris-fe.jar:1.2-SNAPSHOT]
at
org.apache.doris.qe.MysqlConnectProcessor.processOnce(MysqlConnectProcessor.java:281)
~[doris-fe.jar:1.2-SNAPSHOT]
at
org.apache.doris.mysql.ReadListener.lambda$handleEvent$0(ReadListener.java:52)
~[doris-fe.jar:1.2-SNAPSHOT]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
~[?:?]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
~[?:?]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Caused by: org.apache.doris.common.AnalysisException: errCode = 2,
detailMessage = java.lang.NullPointerException
... 13 more
Caused by: java.lang.NullPointerException
at
com.google.common.base.Preconditions.checkNotNull(Preconditions.java:903)
~[guava-32.1.2-jre.jar:?]
at
com.google.common.collect.AbstractMultimap.putAll(AbstractMultimap.java:83)
~[guava-32.1.2-jre.jar:?]
at
com.google.common.collect.ArrayListMultimap.putAll(ArrayListMultimap.java:62)
~[guava-32.1.2-jre.jar:?]
at
org.apache.doris.datasource.FileScanNode.getNodeExplainString(FileScanNode.java:141)
~[doris-fe.jar:1.2-SNAPSHOT]
at
org.apache.doris.planner.PlanNode.getExplainString(PlanNode.java:548)
~[doris-fe.jar:1.2-SNAPSHOT]
at
org.apache.doris.planner.PlanFragment.getExplainString(PlanFragment.java:369)
~[doris-fe.jar:1.2-SNAPSHOT]
at
org.apache.doris.planner.Planner.getExplainString(Planner.java:93)
~[doris-fe.jar:1.2-SNAPSHOT]
at
org.apache.doris.nereids.NereidsPlanner.getExplainString(NereidsPlanner.java:627)
~[doris-fe.jar:1.2-SNAPSHOT]
at
org.apache.doris.nereids.trees.plans.commands.ExplainCommand.run(ExplainCommand.java:96)
~[doris-fe.jar:1.2-SNAPSHOT]
at
org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:736)
~[doris-fe.jar:1.2-SNAPSHOT]
... 12 more
```
---
.../main/java/org/apache/doris/datasource/FileScanNode.java | 2 +-
.../suites/external_table_p0/hive/test_hive_partitions.groovy | 11 ++++++++++-
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java
index 5d47f3eac73..9845c0070fc 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java
@@ -133,7 +133,7 @@ public abstract class FileScanNode extends ExternalScanNode
{
output.append(prefix).append("partition=").append(selectedPartitionNum).append("/").append(totalPartitionNum)
.append("\n");
- if (detailLevel == TExplainLevel.VERBOSE) {
+ if (detailLevel == TExplainLevel.VERBOSE && !isBatchMode()) {
output.append(prefix).append("backends:").append("\n");
Multimap<Long, TFileRangeDesc> scanRangeLocationsMap =
ArrayListMultimap.create();
// 1. group by backend id
diff --git
a/regression-test/suites/external_table_p0/hive/test_hive_partitions.groovy
b/regression-test/suites/external_table_p0/hive/test_hive_partitions.groovy
index 67d565fc2c1..0e41adc3127 100644
--- a/regression-test/suites/external_table_p0/hive/test_hive_partitions.groovy
+++ b/regression-test/suites/external_table_p0/hive/test_hive_partitions.groovy
@@ -91,7 +91,16 @@ suite("test_hive_partitions",
"p0,external,hive,external_docker,external_docker_
q01()
- sql """drop catalog if exists ${catalog_name}"""
+ sql """set num_partitions_in_batch_mode=1"""
+ explain {
+ sql ("select * from partition_table")
+ verbose (true)
+
+ contains "(approximate)inputSplitNum=60"
+ }
+ sql """unset variable num_partitions_in_batch_mode"""
+
+ // sql """drop catalog if exists ${catalog_name}"""
} finally {
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]