This is an automated email from the ASF dual-hosted git repository.
ycycse pushed a commit to branch RefactorEA
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/RefactorEA by this push:
new 1d4fd2662c7 create a new ExplainAnalyzeNode for relation model
1d4fd2662c7 is described below
commit 1d4fd2662c7848509855a732ea96b29595102d05
Author: YangCaiyin <[email protected]>
AuthorDate: Tue Nov 26 17:01:00 2024 +0800
create a new ExplainAnalyzeNode for relation model
---
.../plan/planner/TableOperatorGenerator.java | 2 +-
.../plan/planner/plan/node/ExplainAnalyzeNode.java | 10 ++--
.../plan/planner/plan/node/PlanNodeType.java | 4 ++
.../plan/planner/plan/node/PlanVisitor.java | 6 +++
.../relational/planner/TableLogicalPlanner.java | 8 ++-
.../planner/distribute/AddExchangeNodes.java | 2 +-
.../distribute/TableDistributedPlanGenerator.java | 15 +++---
.../planner}/node/ExplainAnalyzeNode.java | 61 +++++++++++++---------
.../optimizations/UnaliasSymbolReferences.java | 2 +-
9 files changed, 64 insertions(+), 46 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TableOperatorGenerator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TableOperatorGenerator.java
index 27f512f558d..a2a9ff81470 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TableOperatorGenerator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TableOperatorGenerator.java
@@ -82,7 +82,6 @@ import
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggr
import
org.apache.iotdb.db.queryengine.execution.operator.source.relational.aggregation.grouped.StreamingHashAggregationOperator;
import
org.apache.iotdb.db.queryengine.execution.relational.ColumnTransformerBuilder;
import org.apache.iotdb.db.queryengine.plan.analyze.TypeProvider;
-import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.ExplainAnalyzeNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
@@ -110,6 +109,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTableScanNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CollectNode;
+import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ExplainAnalyzeNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.FilterNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.GapFillNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.JoinNode;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/ExplainAnalyzeNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/ExplainAnalyzeNode.java
index c9e9709eccc..e496b65f4b0 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/ExplainAnalyzeNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/ExplainAnalyzeNode.java
@@ -21,7 +21,6 @@ package
org.apache.iotdb.db.queryengine.plan.planner.plan.node;
import org.apache.iotdb.db.queryengine.common.header.ColumnHeaderConstant;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SingleChildProcessNode;
-import org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
import org.apache.tsfile.utils.ReadWriteIOUtils;
@@ -60,11 +59,6 @@ public class ExplainAnalyzeNode extends
SingleChildProcessNode {
return Collections.singletonList(ColumnHeaderConstant.EXPLAIN_ANALYZE);
}
- @Override
- public List<Symbol> getOutputSymbols() {
- return
Collections.singletonList(Symbol.of(ColumnHeaderConstant.EXPLAIN_ANALYZE));
- }
-
@Override
public PlanNode replaceChildren(List<PlanNode> newChildren) {
return new ExplainAnalyzeNode(getPlanNodeId(), newChildren.get(0),
verbose, queryId, timeout);
@@ -74,6 +68,8 @@ public class ExplainAnalyzeNode extends
SingleChildProcessNode {
protected void serializeAttributes(ByteBuffer byteBuffer) {
PlanNodeType.EXPLAIN_ANALYZE.serialize(byteBuffer);
ReadWriteIOUtils.write(verbose, byteBuffer);
+ ReadWriteIOUtils.write(queryId, byteBuffer);
+ ReadWriteIOUtils.write(timeout, byteBuffer);
}
@Override
@@ -87,8 +83,8 @@ public class ExplainAnalyzeNode extends
SingleChildProcessNode {
public static ExplainAnalyzeNode deserialize(ByteBuffer byteBuffer) {
boolean verbose = ReadWriteIOUtils.readBool(byteBuffer);
long queryId = ReadWriteIOUtils.readLong(byteBuffer);
- PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
long timeout = ReadWriteIOUtils.readLong(byteBuffer);
+ PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
return new ExplainAnalyzeNode(planNodeId, null, verbose, queryId, timeout);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
index 5e5f58bac78..40adfdb6118 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
@@ -276,6 +276,7 @@ public enum PlanNodeType {
TABLE_AGGREGATION_NODE((short) 1015),
TABLE_AGGREGATION_TABLE_SCAN_NODE((short) 1016),
TABLE_GAP_FILL_NODE((short) 1017),
+ TABLE_EXPLAIN_ANALYZE_NODE((short) 1018),
RELATIONAL_INSERT_TABLET((short) 2000),
RELATIONAL_INSERT_ROW((short) 2001),
@@ -626,6 +627,9 @@ public enum PlanNodeType {
.deserialize(buffer);
case 1017:
return GapFillNode.deserialize(buffer);
+ case 1018:
+ return
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ExplainAnalyzeNode
+ .deserialize(buffer);
case 2000:
return RelationalInsertTabletNode.deserialize(buffer);
case 2001:
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
index da63cdc393e..95644366979 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
@@ -666,6 +666,12 @@ public abstract class PlanVisitor<R, C> {
return visitMultiChildProcess(node, context);
}
+ public R visitExplainAnalyze(
+
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ExplainAnalyzeNode
node,
+ C context) {
+ return visitSingleChildProcess(node, context);
+ }
+
public R visitOutput(
org.apache.iotdb.db.queryengine.plan.relational.planner.node.OutputNode
node, C context) {
return visitSingleChildProcess(node, context);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
index d69a8a18b75..f42aa40386b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
@@ -25,7 +25,6 @@ import
org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
import org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet;
import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
-import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.ExplainAnalyzeNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.WritePlanNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.read.CountSchemaMergeNode;
@@ -34,6 +33,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.analyzer.Field;
import org.apache.iotdb.db.queryengine.plan.relational.analyzer.RelationType;
import
org.apache.iotdb.db.queryengine.plan.relational.execution.querystats.PlanOptimizersStatsCollector;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
+import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ExplainAnalyzeNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.FilterNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.LimitNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.OffsetNode;
@@ -67,6 +67,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.read.common.type.LongType;
+import org.apache.tsfile.read.common.type.StringType;
import org.apache.tsfile.read.common.type.TypeFactory;
import java.util.ArrayList;
@@ -448,13 +449,16 @@ public class TableLogicalPlanner {
private RelationPlan planExplainAnalyze(final ExplainAnalyze statement,
final Analysis analysis) {
RelationPlan originalQueryPlan =
createRelationPlan(analysis, (Query) (statement.getStatement()));
+ Symbol symbol =
+ symbolAllocator.newSymbol(ColumnHeaderConstant.EXPLAIN_ANALYZE,
StringType.getInstance());
PlanNode newRoot =
new ExplainAnalyzeNode(
queryContext.getQueryId().genPlanNodeId(),
originalQueryPlan.getRoot(),
statement.isVerbose(),
queryContext.getLocalQueryId(),
- queryContext.getTimeOut());
+ queryContext.getTimeOut(),
+ symbol);
return new RelationPlan(
newRoot,
originalQueryPlan.getScope(),
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/AddExchangeNodes.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/AddExchangeNodes.java
index 7b7b4f3b7df..db10774616d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/AddExchangeNodes.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/AddExchangeNodes.java
@@ -23,12 +23,12 @@ import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.partition.DataPartition;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import
org.apache.iotdb.db.queryengine.plan.planner.distribution.NodeDistribution;
-import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.ExplainAnalyzeNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.WritePlanNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.read.TableDeviceSourceNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ExchangeNode;
+import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ExplainAnalyzeNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableScanNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.schema.TableDeviceFetchNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.schema.TableDeviceQueryCountNode;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
index c730c82ad29..8a3bdedf8f7 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
@@ -21,9 +21,7 @@ import
org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
import org.apache.iotdb.commons.utils.PathUtils;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.QueryId;
-import org.apache.iotdb.db.queryengine.common.header.ColumnHeaderConstant;
import
org.apache.iotdb.db.queryengine.plan.planner.distribution.NodeDistribution;
-import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.ExplainAnalyzeNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
@@ -38,6 +36,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.planner.SymbolAllocator;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTableScanNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CollectNode;
+import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ExplainAnalyzeNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.FillNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.FilterNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.GapFillNode;
@@ -62,7 +61,6 @@ import
org.apache.iotdb.db.queryengine.plan.statement.component.Ordering;
import com.google.common.collect.ImmutableSet;
import org.apache.tsfile.common.conf.TSFileConfig;
import org.apache.tsfile.file.metadata.IDeviceID;
-import org.apache.tsfile.read.common.type.StringType;
import org.apache.tsfile.utils.Pair;
import javax.annotation.Nonnull;
@@ -142,6 +140,11 @@ public class TableDistributedPlanGenerator
return Collections.singletonList(newNode);
}
+ @Override
+ public List<PlanNode> visitExplainAnalyze(ExplainAnalyzeNode node,
PlanContext context) {
+ return genResult(node, context);
+ }
+
@Override
public List<PlanNode> visitOutput(OutputNode node, PlanContext context) {
List<PlanNode> childrenNodes = node.getChild().accept(this, context);
@@ -159,12 +162,6 @@ public class TableDistributedPlanGenerator
return Collections.singletonList(node);
}
- @Override
- public List<PlanNode> visitExplainAnalyze(ExplainAnalyzeNode node,
PlanContext context) {
- symbolAllocator.newSymbol(ColumnHeaderConstant.EXPLAIN_ANALYZE,
StringType.getInstance());
- return visitPlan(node, context);
- }
-
@Override
public List<PlanNode> visitFill(FillNode node, PlanContext context) {
if (!(node instanceof ValueFillNode)) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/ExplainAnalyzeNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ExplainAnalyzeNode.java
similarity index 58%
copy from
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/ExplainAnalyzeNode.java
copy to
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ExplainAnalyzeNode.java
index c9e9709eccc..7842afec126 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/ExplainAnalyzeNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ExplainAnalyzeNode.java
@@ -1,25 +1,23 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
-package org.apache.iotdb.db.queryengine.plan.planner.plan.node;
+package org.apache.iotdb.db.queryengine.plan.relational.planner.node;
-import org.apache.iotdb.db.queryengine.common.header.ColumnHeaderConstant;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SingleChildProcessNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
@@ -36,18 +34,25 @@ public class ExplainAnalyzeNode extends
SingleChildProcessNode {
private final long queryId;
private final long timeout;
+ private final Symbol outputSymbol;
public ExplainAnalyzeNode(
- PlanNodeId id, PlanNode child, boolean verbose, long queryId, long
timeout) {
+ PlanNodeId id,
+ PlanNode child,
+ boolean verbose,
+ long queryId,
+ long timeout,
+ Symbol outputSymbol) {
super(id, child);
this.verbose = verbose;
- this.queryId = queryId;
this.timeout = timeout;
+ this.queryId = queryId;
+ this.outputSymbol = outputSymbol;
}
@Override
public PlanNode clone() {
- return new ExplainAnalyzeNode(getPlanNodeId(), child, verbose, queryId,
timeout);
+ return new ExplainAnalyzeNode(getPlanNodeId(), child, verbose, queryId,
timeout, outputSymbol);
}
@Override
@@ -57,39 +62,45 @@ public class ExplainAnalyzeNode extends
SingleChildProcessNode {
@Override
public List<String> getOutputColumnNames() {
- return Collections.singletonList(ColumnHeaderConstant.EXPLAIN_ANALYZE);
+ return null;
}
@Override
public List<Symbol> getOutputSymbols() {
- return
Collections.singletonList(Symbol.of(ColumnHeaderConstant.EXPLAIN_ANALYZE));
+ return Collections.singletonList(outputSymbol);
}
@Override
public PlanNode replaceChildren(List<PlanNode> newChildren) {
- return new ExplainAnalyzeNode(getPlanNodeId(), newChildren.get(0),
verbose, queryId, timeout);
+ return new
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ExplainAnalyzeNode(
+ getPlanNodeId(), newChildren.get(0), verbose, queryId, timeout,
outputSymbol);
}
@Override
protected void serializeAttributes(ByteBuffer byteBuffer) {
- PlanNodeType.EXPLAIN_ANALYZE.serialize(byteBuffer);
+ PlanNodeType.TABLE_EXPLAIN_ANALYZE_NODE.serialize(byteBuffer);
ReadWriteIOUtils.write(verbose, byteBuffer);
+ ReadWriteIOUtils.write(queryId, byteBuffer);
+ ReadWriteIOUtils.write(timeout, byteBuffer);
+ Symbol.serialize(outputSymbol, byteBuffer);
}
@Override
protected void serializeAttributes(DataOutputStream stream) throws
IOException {
- PlanNodeType.EXPLAIN_ANALYZE.serialize(stream);
+ PlanNodeType.TABLE_EXPLAIN_ANALYZE_NODE.serialize(stream);
ReadWriteIOUtils.write(verbose, stream);
ReadWriteIOUtils.write(queryId, stream);
ReadWriteIOUtils.write(timeout, stream);
+ Symbol.serialize(outputSymbol, stream);
}
public static ExplainAnalyzeNode deserialize(ByteBuffer byteBuffer) {
boolean verbose = ReadWriteIOUtils.readBool(byteBuffer);
long queryId = ReadWriteIOUtils.readLong(byteBuffer);
- PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
long timeout = ReadWriteIOUtils.readLong(byteBuffer);
- return new ExplainAnalyzeNode(planNodeId, null, verbose, queryId, timeout);
+ Symbol outputSymbol = Symbol.deserialize(byteBuffer);
+ PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
+ return new ExplainAnalyzeNode(planNodeId, null, verbose, queryId, timeout,
outputSymbol);
}
public boolean isVerbose() {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/UnaliasSymbolReferences.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/UnaliasSymbolReferences.java
index a325f9a974f..b79f9465319 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/UnaliasSymbolReferences.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/UnaliasSymbolReferences.java
@@ -13,7 +13,6 @@
*/
package org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations;
-import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.ExplainAnalyzeNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
@@ -25,6 +24,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
import org.apache.iotdb.db.queryengine.plan.relational.planner.SymbolAllocator;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.ir.DeterminismEvaluator;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationNode;
+import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ExplainAnalyzeNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.FilterNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.GapFillNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.JoinNode;