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

jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 0d9fc3a8801 Add query metrics for table model
0d9fc3a8801 is described below

commit 0d9fc3a8801a714d7df879a06df185eb005fe57f
Author: Beyyes <[email protected]>
AuthorDate: Tue Sep 3 11:45:11 2024 +0800

    Add query metrics for table model
---
 .../queryengine/metric/QueryPlanCostMetricSet.java | 149 +++++++++++++++++----
 .../iotdb/db/queryengine/plan/Coordinator.java     |  14 +-
 .../queryengine/plan/analyze/AnalyzeVisitor.java   |  11 +-
 .../db/queryengine/plan/analyze/Analyzer.java      |   4 +-
 .../queryengine/plan/analyze/TemplatedAnalyze.java |   3 +-
 .../queryengine/plan/execution/QueryExecution.java |   9 +-
 .../TableModelStatementMemorySourceVisitor.java    |   3 +-
 .../queryengine/plan/planner/LogicalPlanner.java   |   7 +-
 .../plan/relational/analyzer/Analyzer.java         |   9 ++
 ...ogicalPlanner.java => TableLogicalPlanner.java} |  19 ++-
 ...nalModelPlanner.java => TableModelPlanner.java} |   6 +-
 .../distribute/TableDistributedPlanner.java        |  12 +-
 .../optimizations/PushPredicateIntoTableScan.java  |  13 ++
 .../plan/relational/analyzer/AnalyzerTest.java     |  79 ++++++-----
 .../analyzer/LimitOffsetPushDownTest.java          |  18 +--
 .../plan/relational/analyzer/SortTest.java         |  32 ++---
 .../plan/relational/analyzer/SubQueryTest.java     |  14 +-
 .../plan/relational/planner/PlanTester.java        |   8 +-
 18 files changed, 287 insertions(+), 123 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/QueryPlanCostMetricSet.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/QueryPlanCostMetricSet.java
index da775515688..0b0721fe44b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/QueryPlanCostMetricSet.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/QueryPlanCostMetricSet.java
@@ -32,10 +32,14 @@ import java.util.Arrays;
 
 public class QueryPlanCostMetricSet implements IMetricSet {
   private static final QueryPlanCostMetricSet INSTANCE = new 
QueryPlanCostMetricSet();
+
+  public static final String TABLE_TYPE = "table";
+  public static final String TREE_TYPE = "tree";
+
   public static final String ANALYZER = "analyzer";
   public static final String LOGICAL_PLANNER = "logical_planner";
+  public static final String LOGICAL_PLAN_OPTIMIZE = "logical_plan_optimize";
   public static final String DISTRIBUTION_PLANNER = "distribution_planner";
-
   public static final String PARTITION_FETCHER = "partition_fetcher";
   public static final String SCHEMA_FETCHER = "schema_fetcher";
 
@@ -43,28 +47,58 @@ public class QueryPlanCostMetricSet implements IMetricSet {
     // empty constructor
   }
 
-  private Timer analyzerTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
-  private Timer logicalPlannerTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
-  private Timer distributionPlannerTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
-  private Timer partitionFetcherTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
-  private Timer schemaFetcherTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
+  private Timer treeAnalyzerTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
+  private Timer treeLogicalPlannerTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
+  private Timer treeDistributionPlannerTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
+  private Timer treePartitionFetcherTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
+  private Timer treeSchemaFetcherTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
 
-  public void recordPlanCost(String stage, long costTimeInNanos) {
+  private Timer tableAnalyzerTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
+  private Timer tableLogicalPlannerTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
+  private Timer tableLogicalPlanOptimizerTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
+  private Timer tableDistributionPlannerTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
+  private Timer tablePartitionFetcherTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
+  private Timer tableSchemaFetcherTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
+
+  public void recordPlanCost(String type, String stage, long costTimeInNanos) {
     switch (stage) {
       case ANALYZER:
-        analyzerTimer.updateNanos(costTimeInNanos);
+        if (TREE_TYPE.equals(type)) {
+          treeAnalyzerTimer.updateNanos(costTimeInNanos);
+        } else {
+          tableAnalyzerTimer.updateNanos(costTimeInNanos);
+        }
         break;
       case LOGICAL_PLANNER:
-        logicalPlannerTimer.updateNanos(costTimeInNanos);
+        if (TREE_TYPE.equals(type)) {
+          treeLogicalPlannerTimer.updateNanos(costTimeInNanos);
+        } else {
+          tableLogicalPlannerTimer.updateNanos(costTimeInNanos);
+        }
+        break;
+      case LOGICAL_PLAN_OPTIMIZE:
+        tableLogicalPlanOptimizerTimer.updateNanos(costTimeInNanos);
         break;
       case DISTRIBUTION_PLANNER:
-        distributionPlannerTimer.updateNanos(costTimeInNanos);
+        if (TREE_TYPE.equals(type)) {
+          treeDistributionPlannerTimer.updateNanos(costTimeInNanos);
+        } else {
+          tableDistributionPlannerTimer.updateNanos(costTimeInNanos);
+        }
         break;
       case PARTITION_FETCHER:
-        partitionFetcherTimer.updateNanos(costTimeInNanos);
+        if (TREE_TYPE.equals(type)) {
+          treePartitionFetcherTimer.updateNanos(costTimeInNanos);
+        } else {
+          tablePartitionFetcherTimer.updateNanos(costTimeInNanos);
+        }
         break;
       case SCHEMA_FETCHER:
-        schemaFetcherTimer.updateNanos(costTimeInNanos);
+        if (TREE_TYPE.equals(type)) {
+          treeSchemaFetcherTimer.updateNanos(costTimeInNanos);
+        } else {
+          tableSchemaFetcherTimer.updateNanos(costTimeInNanos);
+        }
         break;
       default:
         throw new UnsupportedOperationException("Unsupported stage: " + stage);
@@ -73,34 +107,93 @@ public class QueryPlanCostMetricSet implements IMetricSet {
 
   @Override
   public void bindTo(AbstractMetricService metricService) {
-    analyzerTimer =
+    treeAnalyzerTimer =
         metricService.getOrCreateTimer(
             Metric.QUERY_PLAN_COST.toString(),
             MetricLevel.IMPORTANT,
+            Tag.TYPE.toString(),
+            TREE_TYPE,
             Tag.STAGE.toString(),
             ANALYZER);
-    logicalPlannerTimer =
+    treeLogicalPlannerTimer =
         metricService.getOrCreateTimer(
             Metric.QUERY_PLAN_COST.toString(),
             MetricLevel.IMPORTANT,
+            Tag.TYPE.toString(),
+            TREE_TYPE,
             Tag.STAGE.toString(),
             LOGICAL_PLANNER);
-    distributionPlannerTimer =
+    treeDistributionPlannerTimer =
+        metricService.getOrCreateTimer(
+            Metric.QUERY_PLAN_COST.toString(),
+            MetricLevel.IMPORTANT,
+            Tag.TYPE.toString(),
+            TREE_TYPE,
+            Tag.STAGE.toString(),
+            DISTRIBUTION_PLANNER);
+    treePartitionFetcherTimer =
+        metricService.getOrCreateTimer(
+            Metric.QUERY_PLAN_COST.toString(),
+            MetricLevel.IMPORTANT,
+            Tag.TYPE.toString(),
+            TREE_TYPE,
+            Tag.STAGE.toString(),
+            PARTITION_FETCHER);
+    treeSchemaFetcherTimer =
+        metricService.getOrCreateTimer(
+            Metric.QUERY_PLAN_COST.toString(),
+            MetricLevel.IMPORTANT,
+            Tag.TYPE.toString(),
+            TREE_TYPE,
+            Tag.STAGE.toString(),
+            SCHEMA_FETCHER);
+
+    tableAnalyzerTimer =
+        metricService.getOrCreateTimer(
+            Metric.QUERY_PLAN_COST.toString(),
+            MetricLevel.IMPORTANT,
+            Tag.TYPE.toString(),
+            TABLE_TYPE,
+            Tag.STAGE.toString(),
+            ANALYZER);
+    tableLogicalPlannerTimer =
+        metricService.getOrCreateTimer(
+            Metric.QUERY_PLAN_COST.toString(),
+            MetricLevel.IMPORTANT,
+            Tag.TYPE.toString(),
+            TABLE_TYPE,
+            Tag.STAGE.toString(),
+            LOGICAL_PLANNER);
+    tableLogicalPlanOptimizerTimer =
+        metricService.getOrCreateTimer(
+            Metric.QUERY_PLAN_COST.toString(),
+            MetricLevel.IMPORTANT,
+            Tag.TYPE.toString(),
+            TABLE_TYPE,
+            Tag.STAGE.toString(),
+            LOGICAL_PLAN_OPTIMIZE);
+    tableDistributionPlannerTimer =
         metricService.getOrCreateTimer(
             Metric.QUERY_PLAN_COST.toString(),
             MetricLevel.IMPORTANT,
+            Tag.TYPE.toString(),
+            TABLE_TYPE,
             Tag.STAGE.toString(),
             DISTRIBUTION_PLANNER);
-    partitionFetcherTimer =
+    tablePartitionFetcherTimer =
         metricService.getOrCreateTimer(
             Metric.QUERY_PLAN_COST.toString(),
             MetricLevel.IMPORTANT,
+            Tag.TYPE.toString(),
+            TABLE_TYPE,
             Tag.STAGE.toString(),
             PARTITION_FETCHER);
-    schemaFetcherTimer =
+    tableSchemaFetcherTimer =
         metricService.getOrCreateTimer(
             Metric.QUERY_PLAN_COST.toString(),
             MetricLevel.IMPORTANT,
+            Tag.TYPE.toString(),
+            TABLE_TYPE,
             Tag.STAGE.toString(),
             SCHEMA_FETCHER);
   }
@@ -108,14 +201,24 @@ public class QueryPlanCostMetricSet implements IMetricSet 
{
   @Override
   public void unbindFrom(AbstractMetricService metricService) {
     Arrays.asList(
-            ANALYZER, LOGICAL_PLANNER, DISTRIBUTION_PLANNER, 
PARTITION_FETCHER, SCHEMA_FETCHER)
+            ANALYZER,
+            LOGICAL_PLANNER,
+            LOGICAL_PLAN_OPTIMIZE,
+            DISTRIBUTION_PLANNER,
+            PARTITION_FETCHER,
+            SCHEMA_FETCHER)
         .forEach(
             stage ->
-                metricService.remove(
-                    MetricType.TIMER,
-                    Metric.QUERY_PLAN_COST.toString(),
-                    Tag.STAGE.toString(),
-                    stage));
+                Arrays.asList(TREE_TYPE, TABLE_TYPE)
+                    .forEach(
+                        type ->
+                            metricService.remove(
+                                MetricType.TIMER,
+                                Metric.QUERY_PLAN_COST.toString(),
+                                Tag.TYPE.toString(),
+                                type,
+                                Tag.STAGE.toString(),
+                                stage)));
   }
 
   public static QueryPlanCostMetricSet getInstance() {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
index fff9085efa6..a86dfe1dacf 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
@@ -46,7 +46,7 @@ import 
org.apache.iotdb.db.queryengine.plan.execution.config.TableConfigTaskVisi
 import 
org.apache.iotdb.db.queryengine.plan.execution.config.TreeConfigTaskVisitor;
 import org.apache.iotdb.db.queryengine.plan.planner.TreeModelPlanner;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.RelationalModelPlanner;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.TableModelPlanner;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AddColumn;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CreateDB;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CreateTable;
@@ -291,8 +291,8 @@ public class Coordinator {
     queryContext.setTableQuery(true);
     queryContext.setTimeOut(timeOut);
     queryContext.setStartTime(startTime);
-    RelationalModelPlanner relationalModelPlanner =
-        new RelationalModelPlanner(
+    TableModelPlanner tableModelPlanner =
+        new TableModelPlanner(
             statement.toRelationalStatement(queryContext),
             sqlParser,
             metadata,
@@ -301,7 +301,7 @@ public class Coordinator {
             scheduledExecutor,
             SYNC_INTERNAL_SERVICE_CLIENT_MANAGER,
             ASYNC_INTERNAL_SERVICE_CLIENT_MANAGER);
-    return new QueryExecution(relationalModelPlanner, queryContext, executor);
+    return new QueryExecution(tableModelPlanner, queryContext, executor);
   }
 
   private IQueryExecution createQueryExecutionForTableModel(
@@ -340,8 +340,8 @@ public class Coordinator {
     if (statement instanceof WrappedInsertStatement) {
       ((WrappedInsertStatement) statement).setContext(queryContext);
     }
-    RelationalModelPlanner relationalModelPlanner =
-        new RelationalModelPlanner(
+    TableModelPlanner tableModelPlanner =
+        new TableModelPlanner(
             statement,
             sqlParser,
             metadata,
@@ -350,7 +350,7 @@ public class Coordinator {
             scheduledExecutor,
             SYNC_INTERNAL_SERVICE_CLIENT_MANAGER,
             ASYNC_INTERNAL_SERVICE_CLIENT_MANAGER);
-    return new QueryExecution(relationalModelPlanner, queryContext, executor);
+    return new QueryExecution(tableModelPlanner, queryContext, executor);
   }
 
   public IQueryExecution getQueryExecution(Long queryId) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
index 3c55f9588cf..f0a91e5e766 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
@@ -200,6 +200,7 @@ import static 
org.apache.iotdb.db.queryengine.common.header.ColumnHeaderConstant
 import static 
org.apache.iotdb.db.queryengine.common.header.ColumnHeaderConstant.ENDTIME;
 import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.PARTITION_FETCHER;
 import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.SCHEMA_FETCHER;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.TREE_TYPE;
 import static 
org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeUtils.removeLogicalView;
 import static 
org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeUtils.validateSchema;
 import static 
org.apache.iotdb.db.queryengine.plan.analyze.ExpressionAnalyzer.bindSchemaForExpression;
@@ -530,7 +531,8 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
       logger.debug("[EndFetchSchema]");
       long schemaFetchCost = System.nanoTime() - startTime;
       context.setFetchSchemaCost(schemaFetchCost);
-      QueryPlanCostMetricSet.getInstance().recordPlanCost(SCHEMA_FETCHER, 
schemaFetchCost);
+      QueryPlanCostMetricSet.getInstance()
+          .recordPlanCost(TREE_TYPE, SCHEMA_FETCHER, schemaFetchCost);
     }
 
     analysis.setSchemaTree(schemaTree);
@@ -2215,7 +2217,8 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
       }
     } finally {
       long partitionFetchCost = System.nanoTime() - startTime;
-      QueryPlanCostMetricSet.getInstance().recordPlanCost(PARTITION_FETCHER, 
partitionFetchCost);
+      QueryPlanCostMetricSet.getInstance()
+          .recordPlanCost(TREE_TYPE, PARTITION_FETCHER, partitionFetchCost);
       context.setFetchPartitionCost(partitionFetchCost);
     }
   }
@@ -2378,7 +2381,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     long startTime = System.nanoTime();
     ISchemaTree targetSchemaTree = schemaFetcher.fetchSchema(targetPathTree, 
true, context);
     QueryPlanCostMetricSet.getInstance()
-        .recordPlanCost(SCHEMA_FETCHER, System.nanoTime() - startTime);
+        .recordPlanCost(TREE_TYPE, SCHEMA_FETCHER, System.nanoTime() - 
startTime);
     deviceViewIntoPathDescriptor.bindType(targetSchemaTree);
 
     analysis.setDeviceViewIntoPathDescriptor(deviceViewIntoPathDescriptor);
@@ -2456,7 +2459,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     ISchemaTree targetSchemaTree = schemaFetcher.fetchSchema(targetPathTree, 
true, context);
     updateSchemaTreeByViews(analysis, targetSchemaTree, context);
     QueryPlanCostMetricSet.getInstance()
-        .recordPlanCost(SCHEMA_FETCHER, System.nanoTime() - startTime);
+        .recordPlanCost(TREE_TYPE, SCHEMA_FETCHER, System.nanoTime() - 
startTime);
     intoPathDescriptor.bindType(targetSchemaTree);
 
     analysis.setIntoPathDescriptor(intoPathDescriptor);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analyzer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analyzer.java
index eca06360c9c..238620b6f48 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analyzer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analyzer.java
@@ -26,6 +26,7 @@ import 
org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaFetcher;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 
 import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.ANALYZER;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.TREE_TYPE;
 
 /** Analyze the statement and generate Analysis. */
 public class Analyzer {
@@ -51,7 +52,8 @@ public class Analyzer {
     }
 
     if (statement.isQuery()) {
-      QueryPlanCostMetricSet.getInstance().recordPlanCost(ANALYZER, 
System.nanoTime() - startTime);
+      QueryPlanCostMetricSet.getInstance()
+          .recordPlanCost(TREE_TYPE, ANALYZER, System.nanoTime() - startTime);
     }
     return analysis;
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
index d3bf070d2be..c1f0971b293 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
@@ -58,6 +58,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.PARTITION_FETCHER;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.TREE_TYPE;
 import static 
org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeVisitor.CONFIG;
 import static 
org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeVisitor.DEVICE_EXPRESSION;
 import static 
org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeVisitor.END_TIME_EXPRESSION;
@@ -418,7 +419,7 @@ public class TemplatedAnalyze {
       }
     } finally {
       QueryPlanCostMetricSet.getInstance()
-          .recordPlanCost(PARTITION_FETCHER, System.nanoTime() - startTime);
+          .recordPlanCost(TREE_TYPE, PARTITION_FETCHER, System.nanoTime() - 
startTime);
     }
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
index 108b117298c..ff2509f1d69 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
@@ -72,6 +72,7 @@ import static 
com.google.common.base.Throwables.throwIfUnchecked;
 import static 
org.apache.iotdb.db.queryengine.common.DataNodeEndPoints.isSameNode;
 import static 
org.apache.iotdb.db.queryengine.metric.QueryExecutionMetricSet.WAIT_FOR_RESULT;
 import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.DISTRIBUTION_PLANNER;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.TREE_TYPE;
 
 /**
  * QueryExecution stores all the status of a query which is being prepared or 
running inside the MPP
@@ -153,7 +154,7 @@ public class QueryExecution implements IQueryExecution {
 
   @Override
   public void start() {
-    final long startTime = System.nanoTime();
+    long startTime = System.nanoTime();
     if (skipExecute()) {
       LOGGER.debug("[SkipExecute]");
       if (analysis.isFailed()) {
@@ -184,8 +185,7 @@ public class QueryExecution implements IQueryExecution {
     doDistributedPlan();
 
     // update timeout after finishing plan stage
-    context.setTimeOut(
-        context.getTimeOut() - (System.currentTimeMillis() - 
context.getStartTime()));
+    context.setTimeOut(context.getTimeOut() - (System.nanoTime() - 
context.getStartTime()));
 
     stateMachine.transitionToPlanned();
     if (context.getQueryType() == QueryType.READ) {
@@ -302,7 +302,8 @@ public class QueryExecution implements IQueryExecution {
     if (analysis.isQuery()) {
       long distributionPlanCost = System.nanoTime() - startTime;
       context.setDistributionPlanCost(distributionPlanCost);
-      QUERY_PLAN_COST_METRIC_SET.recordPlanCost(DISTRIBUTION_PLANNER, 
distributionPlanCost);
+      QUERY_PLAN_COST_METRIC_SET.recordPlanCost(
+          TREE_TYPE, DISTRIBUTION_PLANNER, distributionPlanCost);
     }
 
     // if is this Statement is ShowQueryStatement, set its instances to the 
highest priority, so
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/TableModelStatementMemorySourceVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/TableModelStatementMemorySourceVisitor.java
index ce8065659fa..83c0cdb5af1 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/TableModelStatementMemorySourceVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/TableModelStatementMemorySourceVisitor.java
@@ -26,6 +26,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.LocalExecutionPlanner;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanGraphPrinter;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.TableLogicalPlanner;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.distribute.TableDistributedPlanGenerator;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.distribute.TableDistributedPlanner;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AstVisitor;
@@ -65,7 +66,7 @@ public class TableModelStatementMemorySourceVisitor
                 new ColumnHeader(IoTDBConstant.COLUMN_DISTRIBUTION_PLAN, 
TSDataType.TEXT)),
             true);
     final LogicalQueryPlan logicalPlan =
-        new 
org.apache.iotdb.db.queryengine.plan.relational.planner.LogicalPlanner(
+        new TableLogicalPlanner(
                 context.getQueryContext(),
                 LocalExecutionPlanner.getInstance().metadata,
                 context.getQueryContext().getSession(),
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
index 65f28cd4a9e..1a05c5fc6e8 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
@@ -31,6 +31,7 @@ import java.util.Arrays;
 import java.util.List;
 
 import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.LOGICAL_PLANNER;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.TREE_TYPE;
 
 /** Generate a logical plan for the statement. */
 public class LogicalPlanner {
@@ -52,13 +53,15 @@ public class LogicalPlanner {
     if (analysis.isQuery()) {
 
       long planFinishTime = System.nanoTime();
-      QueryPlanCostMetricSet.getInstance()
-          .recordPlanCost(LOGICAL_PLANNER, System.nanoTime() - planFinishTime);
       context.setLogicalPlanCost(planFinishTime - startTime);
+
       for (PlanOptimizer optimizer : optimizers) {
         rootNode = optimizer.optimize(rootNode, analysis, context);
       }
       context.setLogicalOptimizationCost(System.nanoTime() - planFinishTime);
+
+      QueryPlanCostMetricSet.getInstance()
+          .recordPlanCost(TREE_TYPE, LOGICAL_PLANNER, System.nanoTime() - 
planFinishTime);
     }
 
     return new LogicalQueryPlan(context, rootNode);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analyzer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analyzer.java
index f5861cf45fe..683650cb87f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analyzer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analyzer.java
@@ -23,8 +23,10 @@ import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.SessionInfo;
 import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
+import org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Parameter;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Query;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
 import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WrappedInsertStatement;
 
@@ -32,6 +34,8 @@ import java.util.List;
 import java.util.Map;
 
 import static java.util.Objects.requireNonNull;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.ANALYZER;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.TABLE_TYPE;
 
 public class Analyzer {
 
@@ -76,11 +80,16 @@ public class Analyzer {
       analysis.setDatabaseName(session.getDatabaseName().get());
     }
 
+    long startTime = System.nanoTime();
     StatementAnalyzer analyzer =
         statementAnalyzerFactory.createStatementAnalyzer(
             analysis, context, session, warningCollector, 
CorrelationSupport.ALLOWED);
 
     analyzer.analyze(statement);
+    if (statement instanceof Query) {
+      QueryPlanCostMetricSet.getInstance()
+          .recordPlanCost(TABLE_TYPE, ANALYZER, System.nanoTime() - startTime);
+    }
 
     // TODO access control
     // check column access permissions for each table
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
similarity index 94%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
index 8ba4286183b..5de5aa29236 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
@@ -21,6 +21,7 @@ import org.apache.iotdb.db.queryengine.common.SessionInfo;
 import org.apache.iotdb.db.queryengine.common.header.ColumnHeader;
 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.PlanNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.WritePlanNode;
@@ -64,11 +65,14 @@ import java.util.Objects;
 import java.util.Optional;
 
 import static java.util.Objects.requireNonNull;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.LOGICAL_PLANNER;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.LOGICAL_PLAN_OPTIMIZE;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.TABLE_TYPE;
 import static 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDevice.getDeviceColumnHeaderList;
 import static 
org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager.getTSDataType;
 
-public class LogicalPlanner {
-  private static final Logger LOG = 
LoggerFactory.getLogger(LogicalPlanner.class);
+public class TableLogicalPlanner {
+  private static final Logger LOG = 
LoggerFactory.getLogger(TableLogicalPlanner.class);
   private final MPPQueryContext queryContext;
   private final SessionInfo sessionInfo;
   private final SymbolAllocator symbolAllocator = new SymbolAllocator();
@@ -76,7 +80,7 @@ public class LogicalPlanner {
   private final Metadata metadata;
   private final WarningCollector warningCollector;
 
-  public LogicalPlanner(
+  public TableLogicalPlanner(
       MPPQueryContext queryContext,
       Metadata metadata,
       SessionInfo sessionInfo,
@@ -91,7 +95,7 @@ public class LogicalPlanner {
   }
 
   @TestOnly
-  public LogicalPlanner(
+  public TableLogicalPlanner(
       MPPQueryContext queryContext,
       Metadata metadata,
       SessionInfo sessionInfo,
@@ -105,9 +109,14 @@ public class LogicalPlanner {
   }
 
   public LogicalQueryPlan plan(Analysis analysis) {
+    long startTime = System.nanoTime();
     PlanNode planNode = planStatement(analysis, analysis.getStatement());
 
     if (analysis.getStatement() instanceof Query) {
+      QueryPlanCostMetricSet.getInstance()
+          .recordPlanCost(TABLE_TYPE, LOGICAL_PLANNER, System.nanoTime() - 
startTime);
+      startTime = System.nanoTime();
+
       for (PlanOptimizer optimizer : planOptimizers) {
         planNode =
             optimizer.optimize(
@@ -123,6 +132,8 @@ public class LogicalPlanner {
                     warningCollector,
                     
PlanOptimizersStatsCollector.createPlanOptimizersStatsCollector()));
       }
+      QueryPlanCostMetricSet.getInstance()
+          .recordPlanCost(TABLE_TYPE, LOGICAL_PLAN_OPTIMIZE, System.nanoTime() 
- startTime);
     }
 
     return new LogicalQueryPlan(queryContext, planNode);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableModelPlanner.java
similarity index 97%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableModelPlanner.java
index 2a2f40e94ca..2df9f797158 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableModelPlanner.java
@@ -47,7 +47,7 @@ import java.util.Collections;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledExecutorService;
 
-public class RelationalModelPlanner implements IPlanner {
+public class TableModelPlanner implements IPlanner {
 
   private final Statement statement;
 
@@ -69,7 +69,7 @@ public class RelationalModelPlanner implements IPlanner {
   private final IClientManager<TEndPoint, AsyncDataNodeInternalServiceClient>
       asyncInternalServiceClientManager;
 
-  public RelationalModelPlanner(
+  public TableModelPlanner(
       Statement statement,
       SqlParser sqlParser,
       Metadata metadata,
@@ -107,7 +107,7 @@ public class RelationalModelPlanner implements IPlanner {
 
   @Override
   public LogicalQueryPlan doLogicalPlan(IAnalysis analysis, MPPQueryContext 
context) {
-    return new LogicalPlanner(context, metadata, context.getSession(), 
warningCollector)
+    return new TableLogicalPlanner(context, metadata, context.getSession(), 
warningCollector)
         .plan((Analysis) analysis);
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanner.java
index 363bcde7a44..069d4024d65 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanner.java
@@ -16,6 +16,7 @@ package 
org.apache.iotdb.db.queryengine.plan.relational.planner.distribute;
 import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import 
org.apache.iotdb.db.queryengine.execution.exchange.sink.DownStreamChannelLocation;
+import org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import 
org.apache.iotdb.db.queryengine.plan.planner.distribution.WriteFragmentParallelPlanner;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan;
@@ -43,6 +44,8 @@ import java.util.Map;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static 
org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector.NOOP;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.DISTRIBUTION_PLANNER;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.TABLE_TYPE;
 
 public class TableDistributedPlanner {
 
@@ -62,6 +65,7 @@ public class TableDistributedPlanner {
   }
 
   public DistributedQueryPlan plan() {
+    long startTime = System.nanoTime();
     TableDistributedPlanGenerator.PlanContext planContext =
         new TableDistributedPlanGenerator.PlanContext();
     PlanNode outputNodeWithExchange = 
generateDistributedPlanWithOptimize(planContext);
@@ -71,9 +75,15 @@ public class TableDistributedPlanner {
           .getRespDatasetHeader()
           .setTableColumnToTsBlockIndexMap((OutputNode) 
outputNodeWithExchange);
     }
+
     adjustUpStream(outputNodeWithExchange, planContext);
+    DistributedQueryPlan resultDistributedPlan = 
generateDistributedPlan(outputNodeWithExchange);
 
-    return generateDistributedPlan(outputNodeWithExchange);
+    if (analysis.getStatement() instanceof Query) {
+      QueryPlanCostMetricSet.getInstance()
+          .recordPlanCost(TABLE_TYPE, DISTRIBUTION_PLANNER, System.nanoTime() 
- startTime);
+    }
+    return resultDistributedPlan;
   }
 
   public PlanNode generateDistributedPlanWithOptimize(
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java
index 6e738a1c4aa..3e525cc32d8 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java
@@ -20,6 +20,7 @@ import 
org.apache.iotdb.commons.partition.DataPartitionQueryParam;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
+import org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet;
 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.process.MultiChildProcessNode;
@@ -56,6 +57,9 @@ import static java.util.Objects.requireNonNull;
 import static 
org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory.ATTRIBUTE;
 import static 
org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory.MEASUREMENT;
 import static 
org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory.TIME;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.PARTITION_FETCHER;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.SCHEMA_FETCHER;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.TABLE_TYPE;
 import static 
org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeVisitor.getTimePartitionSlotList;
 import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.ir.GlobalTimePredicateExtractVisitor.extractGlobalTimeFilter;
 
@@ -274,10 +278,14 @@ public class PushPredicateIntoTableScan implements 
PlanOptimizer {
           node.getIdAndAttributeIndexMap().put(columnName, attributeIndex++);
         }
       }
+
+      long startTime = System.nanoTime();
       List<DeviceEntry> deviceEntries =
           metadata.indexScan(
               node.getQualifiedObjectName(), metadataExpressions, 
attributeColumns, queryContext);
       node.setDeviceEntries(deviceEntries);
+      QueryPlanCostMetricSet.getInstance()
+          .recordPlanCost(TABLE_TYPE, SCHEMA_FETCHER, System.nanoTime() - 
startTime);
 
       if (deviceEntries.isEmpty()) {
         analysis.setFinishQueryAfterAnalyze();
@@ -289,6 +297,8 @@ public class PushPredicateIntoTableScan implements 
PlanOptimizer {
                 .orElse(null);
         node.setTimeFilter(timeFilter);
         String treeModelDatabase = "root." + 
node.getQualifiedObjectName().getDatabaseName();
+
+        startTime = System.nanoTime();
         DataPartition dataPartition =
             fetchDataPartitionByDevices(treeModelDatabase, deviceEntries, 
timeFilter);
 
@@ -303,6 +313,9 @@ public class PushPredicateIntoTableScan implements 
PlanOptimizer {
         } else {
           analysis.upsertDataPartition(dataPartition);
         }
+
+        QueryPlanCostMetricSet.getInstance()
+            .recordPlanCost(TABLE_TYPE, PARTITION_FETCHER, System.nanoTime() - 
startTime);
       }
     }
 
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
index 250208e6fd5..9024de680b3 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
@@ -51,8 +51,8 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
 import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.OperatorNotFoundException;
 import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableSchema;
-import org.apache.iotdb.db.queryengine.plan.relational.planner.LogicalPlanner;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.TableLogicalPlanner;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.distribute.TableDistributedPlanner;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CollectNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.FilterNode;
@@ -123,7 +123,7 @@ public class AnalyzerTest {
   String sql;
   Analysis actualAnalysis;
   MPPQueryContext context;
-  LogicalPlanner logicalPlanner;
+  TableLogicalPlanner logicalPlanner;
   LogicalQueryPlan logicalQueryPlan;
   PlanNode rootNode;
   TableDistributedPlanner distributionPlanner;
@@ -182,7 +182,7 @@ public class AnalyzerTest {
     assertNotNull(actualAnalysis);
     assertEquals(1, actualAnalysis.getTables().size());
 
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -221,7 +221,7 @@ public class AnalyzerTest {
     actualAnalysis = analyzeSQL(sql, metadata, context);
     assertNotNull(actualAnalysis);
     assertEquals(1, actualAnalysis.getTables().size());
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -272,7 +272,7 @@ public class AnalyzerTest {
     actualAnalysis = analyzeSQL(sql, metadata, context);
     assertNotNull(actualAnalysis);
     assertEquals(1, actualAnalysis.getTables().size());
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -331,7 +331,7 @@ public class AnalyzerTest {
     actualAnalysis = analyzeSQL(sql, metadata, context);
     assertNotNull(actualAnalysis);
     assertEquals(1, actualAnalysis.getTables().size());
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -361,7 +361,7 @@ public class AnalyzerTest {
     actualAnalysis = analyzeSQL(sql, metadata, context);
     assertNotNull(actualAnalysis);
     assertEquals(1, actualAnalysis.getTables().size());
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -390,7 +390,7 @@ public class AnalyzerTest {
     actualAnalysis = analyzeSQL(sql, metadata, context);
     assertNotNull(actualAnalysis);
     assertEquals(1, actualAnalysis.getTables().size());
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -431,7 +431,7 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     assertEquals(1, actualAnalysis.getTables().size());
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -479,7 +479,7 @@ public class AnalyzerTest {
     actualAnalysis = analyzeSQL(sql, metadata, context);
     assertEquals(1, actualAnalysis.getTables().size());
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -512,7 +512,7 @@ public class AnalyzerTest {
     actualAnalysis = analyzeSQL(sql, metadata, context);
     assertNotNull(actualAnalysis);
     assertEquals(1, actualAnalysis.getTables().size());
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -527,7 +527,7 @@ public class AnalyzerTest {
     assertNotNull(actualAnalysis);
     assertEquals(1, actualAnalysis.getTables().size());
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -549,7 +549,7 @@ public class AnalyzerTest {
     actualAnalysis = analyzeSQL(sql, metadata, context);
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode.getChildren().get(0) instanceof ProjectNode);
@@ -570,7 +570,7 @@ public class AnalyzerTest {
     actualAnalysis = analyzeSQL(sql, metadata, context);
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -587,7 +587,7 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode.getChildren().get(0) instanceof FilterNode);
@@ -606,7 +606,7 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -623,7 +623,7 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode.getChildren().get(0) instanceof ProjectNode);
@@ -640,7 +640,7 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -649,7 +649,7 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -664,7 +664,7 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -681,7 +681,7 @@ public class AnalyzerTest {
     sql = "SELECT CAST(s2 AS DOUBLE) FROM table1 WHERE CAST(s1 AS DOUBLE) > 
1.0";
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -690,7 +690,7 @@ public class AnalyzerTest {
         "SELECT SUBSTRING(tag1, 2), SUBSTRING(tag2, s1) FROM table1 WHERE 
SUBSTRING(tag2, 1) = 'A'";
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -698,7 +698,7 @@ public class AnalyzerTest {
     sql = "SELECT ROUND(s1, 1) FROM table1 WHERE ROUND(s2, 2) > 1.0";
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -706,7 +706,7 @@ public class AnalyzerTest {
     sql = "SELECT REPLACE(tag1, 'A', 'B') FROM table1 WHERE REPLACE(attr1, 
'C', 'D') = 'D'";
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
   }
@@ -717,7 +717,7 @@ public class AnalyzerTest {
     sql = "SELECT DIFF(s1) FROM table1 WHERE DIFF(s2) > 0";
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode.getChildren().get(0) instanceof ProjectNode);
@@ -760,7 +760,7 @@ public class AnalyzerTest {
     sql = "SELECT s1 FROM table1 WHERE DIFF(s2) > 0 and time > 5 and tag1 = 
'A' and s1 = 1";
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
-    logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    logicalPlanner = new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
     logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode.getChildren().get(0) instanceof ProjectNode);
@@ -779,7 +779,7 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -805,7 +805,8 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(actualAnalysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector)
+            .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode.getChildren().get(0) instanceof OffsetNode);
     OffsetNode offsetNode = (OffsetNode) rootNode.getChildren().get(0);
@@ -819,7 +820,8 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(actualAnalysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector)
+            .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode.getChildren().get(0) instanceof ProjectNode);
     assertTrue(getChildrenNode(rootNode, 2) instanceof OffsetNode);
@@ -835,7 +837,8 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(actualAnalysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector)
+            .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
     assertTrue(getChildrenNode(rootNode, 1) instanceof TableScanNode);
@@ -852,7 +855,8 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(actualAnalysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector)
+            .plan(actualAnalysis);
     // logical plan: `OutputNode - ProjectNode - LimitNode - TableScanNode`
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -885,7 +889,8 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(actualAnalysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector)
+            .plan(actualAnalysis);
     // logical plan: `OutputNode - ProjectNode - LimitNode - TableScanNode`
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(rootNode instanceof OutputNode);
@@ -908,7 +913,8 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(actualAnalysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector)
+            .plan(actualAnalysis);
     // logical plan: `OutputNode - ProjectNode - LimitNode - TableScanNode`
     rootNode = logicalQueryPlan.getRootNode();
     // distributed plan: `IdentitySink - OutputNode - ProjectNode - LimitNode 
- TableScanNode`
@@ -928,7 +934,8 @@ public class AnalyzerTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(actualAnalysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector)
+            .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     distributionPlanner = new TableDistributedPlanner(actualAnalysis, 
logicalQueryPlan, context);
     distributedQueryPlan = distributionPlanner.plan();
@@ -1039,7 +1046,7 @@ public class AnalyzerTest {
     assertEquals(3, partitionSlotMapMap.size());
 
     logicalQueryPlan =
-        new LogicalPlanner(context, mockMetadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, mockMetadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
 
     RelationalInsertTabletNode insertTabletNode =
@@ -1085,7 +1092,7 @@ public class AnalyzerTest {
     assertEquals(1, partitionSlotMapMap.size());
 
     logicalQueryPlan =
-        new LogicalPlanner(context, mockMetadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, mockMetadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
 
     RelationalInsertRowNode insertNode = (RelationalInsertRowNode) 
logicalQueryPlan.getRootNode();
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/LimitOffsetPushDownTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/LimitOffsetPushDownTest.java
index 2e6f3bca6df..6e2bb2601f1 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/LimitOffsetPushDownTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/LimitOffsetPushDownTest.java
@@ -25,7 +25,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ExchangeNode;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
-import org.apache.iotdb.db.queryengine.plan.relational.planner.LogicalPlanner;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.TableLogicalPlanner;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.distribute.TableDistributedPlanner;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CollectNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.LimitNode;
@@ -59,7 +59,7 @@ public class LimitOffsetPushDownTest {
   String sql;
   Analysis actualAnalysis;
   MPPQueryContext context;
-  LogicalPlanner logicalPlanner;
+  TableLogicalPlanner logicalPlanner;
   LogicalQueryPlan logicalQueryPlan;
   PlanNode rootNode;
   TableDistributedPlanner distributionPlanner;
@@ -73,7 +73,7 @@ public class LimitOffsetPushDownTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     // LogicalPlan: `Output - Project - Offset - Limit - TableScan`
@@ -113,7 +113,7 @@ public class LimitOffsetPushDownTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     // LogicalPlan: `Output - Offset - Limit - Project - StreamSort -  Project 
- TableScan`
@@ -147,7 +147,7 @@ public class LimitOffsetPushDownTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     // LogicalPlan: `Output - Limit - StreamSort - TableScan`
@@ -186,7 +186,7 @@ public class LimitOffsetPushDownTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     // LogicalPlan: `Output - Offset - Limit - Project - StreamSort - Project 
- TableScan`
@@ -227,7 +227,7 @@ public class LimitOffsetPushDownTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     // LogicalPlan: `Output - Offset - Project - TopK - Project - TableScan`
     rootNode = logicalQueryPlan.getRootNode();
@@ -267,7 +267,7 @@ public class LimitOffsetPushDownTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     // LogicalPlan: `Output - Offset - Project - TopK - Project - TableScan`
     rootNode = logicalQueryPlan.getRootNode();
@@ -304,7 +304,7 @@ public class LimitOffsetPushDownTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     // LogicalPlan: `Output - Project - Limit - TableScan`
     rootNode = logicalQueryPlan.getRootNode();
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SortTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SortTest.java
index a07678ccaaa..045de6debb9 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SortTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SortTest.java
@@ -31,7 +31,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ExchangeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.sink.IdentitySinkNode;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
-import org.apache.iotdb.db.queryengine.plan.relational.planner.LogicalPlanner;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.TableLogicalPlanner;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.distribute.TableDistributedPlanner;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.FilterNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.LimitNode;
@@ -100,7 +100,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
 
     // LogicalPlan: 
`Output-Offset-Limit-Project-StreamSort-Project-Filter-TableScan`
@@ -176,7 +176,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
     // LogicalPlan: `Output-Offset-Limit-StreamSort-TableScan`
     assertTrue(getChildrenNode(logicalPlanNode, 3) instanceof StreamSortNode);
@@ -202,7 +202,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
 
     // LogicalPlan: 
`Output-Offset-Limit-Project-StreamSort-Project-Filter-TableScan`
@@ -280,7 +280,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
 
     // LogicalPlan: `Output-Project-StreamSort-Project-Filter-TableScan`
@@ -348,7 +348,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
 
     // LogicalPlan: 
`Output-Offset-Limit-Project-StreamSort-Project-Filter-TableScan`
@@ -428,7 +428,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
 
     // LogicalPlan: 
`Output-Offset-Limit-Project-StreamSort-Project-Filter-TableScan`
@@ -506,7 +506,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
 
     assertTopKNoFilter(originalDeviceEntries1, originalDeviceEntries2, DESC, 
15, 0, true);
@@ -518,7 +518,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
     assertTopKWithFilter(originalDeviceEntries1, originalDeviceEntries2, DESC, 
0, 0, false);
 
@@ -529,7 +529,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
     assertTopKWithFilter(originalDeviceEntries1, originalDeviceEntries2, DESC, 
0, 0, false);
 
@@ -540,7 +540,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
 
     assertTopKWithFilter(originalDeviceEntries1, originalDeviceEntries2, DESC, 
0, 0, false);
@@ -555,7 +555,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
     assertTopKNoFilter(originalDeviceEntries1, originalDeviceEntries2, ASC, 0, 
0, false);
 
@@ -566,7 +566,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
     assertTopKWithFilter(originalDeviceEntries1, originalDeviceEntries2, ASC, 
0, 0, false);
 
@@ -577,7 +577,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
     assertTopKWithFilter(originalDeviceEntries1, originalDeviceEntries2, ASC, 
0, 0, false);
 
@@ -588,7 +588,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
     assertTopKWithFilter(originalDeviceEntries1, originalDeviceEntries2, ASC, 
0, 0, false);
   }
@@ -600,7 +600,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
     distributionPlanner = new TableDistributedPlanner(analysis, 
logicalQueryPlan, context);
     distributedQueryPlan = distributionPlanner.plan();
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SubQueryTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SubQueryTest.java
index 6db97aac6e4..66fd695ae83 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SubQueryTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SubQueryTest.java
@@ -26,7 +26,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ExchangeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.sink.IdentitySinkNode;
-import org.apache.iotdb.db.queryengine.plan.relational.planner.LogicalPlanner;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.TableLogicalPlanner;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.distribute.TableDistributedPlanner;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.FilterNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.LimitNode;
@@ -94,7 +94,7 @@ public class SubQueryTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
 
     // LogicalPlan: `Output - Offset - Limit - StreamSort - Project - 
TableScan`
@@ -179,7 +179,7 @@ public class SubQueryTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
 
     // LogicalPlan: `Output - Offset - TopK - Project - Limit - Project - 
StreamSort - Project -
@@ -275,7 +275,7 @@ public class SubQueryTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
 
     // LogicalPlan: `Output - Offset - ProjectNode - TopK - Project - Limit - 
Project - StreamSort -
@@ -390,7 +390,7 @@ public class SubQueryTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     analysis = analyzeSQL(sql, metadata, context);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
warningCollector).plan(analysis);
     logicalPlanNode = logicalQueryPlan.getRootNode();
 
     // LogicalPlan: `Output - Offset - ProjectNode - TopK - Project - Filter - 
Limit - Project -
@@ -487,7 +487,7 @@ public class SubQueryTest {
     sql = "SELECT * FROM (SELECT * FROM table1 WHERE s1>1) WHERE s2>2";
     analysis = analyzeSQL(sql, TEST_MATADATA, QUERY_CONTEXT);
     logicalPlanNode =
-        new LogicalPlanner(QUERY_CONTEXT, TEST_MATADATA, SESSION_INFO, 
DEFAULT_WARNING)
+        new TableLogicalPlanner(QUERY_CONTEXT, TEST_MATADATA, SESSION_INFO, 
DEFAULT_WARNING)
             .plan(analysis)
             .getRootNode();
     assertNodeMatches(logicalPlanNode, OutputNode.class, TableScanNode.class);
@@ -502,7 +502,7 @@ public class SubQueryTest {
     sql = "SELECT * FROM (SELECT * FROM table1 limit 10) limit 5";
     analysis = analyzeSQL(sql, TEST_MATADATA, QUERY_CONTEXT);
     logicalPlanNode =
-        new LogicalPlanner(QUERY_CONTEXT, TEST_MATADATA, SESSION_INFO, 
DEFAULT_WARNING)
+        new TableLogicalPlanner(QUERY_CONTEXT, TEST_MATADATA, SESSION_INFO, 
DEFAULT_WARNING)
             .plan(analysis)
             .getRootNode();
     assertNodeMatches(logicalPlanNode, OutputNode.class, LimitNode.class, 
TableScanNode.class);
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
index 254fd5f0912..dd3fcae48c6 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
@@ -84,8 +84,8 @@ public class PlanTester {
     Analysis analysis = analyze(sql, metadata);
     this.analysis = analysis;
 
-    LogicalPlanner logicalPlanner =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
+    TableLogicalPlanner logicalPlanner =
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP);
 
     plan = logicalPlanner.plan(analysis);
 
@@ -102,8 +102,8 @@ public class PlanTester {
 
     Analysis analysis = analyze(sql, metadata);
 
-    LogicalPlanner logicalPlanner =
-        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP, optimizers);
+    TableLogicalPlanner logicalPlanner =
+        new TableLogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP, optimizers);
 
     return logicalPlanner.plan(analysis);
   }

Reply via email to