You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2024/06/18 00:43:26 UTC

(iotdb) branch TableModelIngestion updated (6c24a6f9ec6 -> f09ad546ee4)

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

jiangtian pushed a change to branch TableModelIngestion
in repository https://gitbox.apache.org/repos/asf/iotdb.git


    from 6c24a6f9ec6 temp save
     add d72429fbe11 Merge master0611 (#12703)
     add 50d8708f2ec [Table Model] Schema Validation Interface (#12707)
     new a8cb5296002 Merge branch 'master' into ty/TableModelGrammarTest
     new f09ad546ee4 temp save

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 distribution/src/assembly/all.xml                  |   9 +
 distribution/src/assembly/confignode.xml           |   9 +
 distribution/src/assembly/datanode.xml             |   9 +
 .../org/apache/iotdb/db/it/IoTDBRepairDataIT.java  |   2 +-
 .../iotdb/db/it/IoTDBSetConfigurationIT.java       |  89 +++++++
 .../java/org/apache/iotdb/db/it/IoTDBSettleIT.java |   2 +-
 .../org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java |   5 +-
 .../db/it/aggregation/IoTDBAggregationIT.java      |  15 +-
 .../db/it/aggregation/maxby/IoTDBMaxByIT.java      |   3 +-
 .../db/it/aggregation/minby/IoTDBMinByIT.java      |   3 +-
 .../iotdb/db/it/udf/IoTDBUDFWindowQuery2IT.java    | 216 ++++++++++++++++
 .../db/it/udf/IoTDBUDTFBuiltinFunctionIT.java      |   4 +-
 .../java/org/apache/iotdb/cli/AbstractCli.java     |  34 ++-
 .../org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java  |   8 +
 .../org/apache/iotdb/rpc/IoTDBJDBCDataSet.java     |   4 +-
 .../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java |   4 +-
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   |  11 +-
 .../assembly/resources/sbin/stop-confignode.bat    |  19 +-
 .../confignode/client/ConfigNodeRequestType.java   |   4 +-
 .../confignode/client/DataNodeRequestType.java     |   2 +
 .../client/async/AsyncDataNodeClientPool.java      |   7 +
 .../client/sync/SyncConfigNodeClientPool.java      |   3 +
 .../client/sync/SyncDataNodeClientPool.java        |   8 +-
 .../confignode/conf/ConfigNodeDescriptor.java      |   6 +-
 .../iotdb/confignode/manager/ConfigManager.java    |  52 ++++
 .../apache/iotdb/confignode/manager/IManager.java  |   8 +
 .../iotdb/confignode/manager/node/NodeManager.java | 107 +++++++-
 .../manager/partition/PartitionManager.java        |   2 +-
 .../persistence/pipe/PipePluginInfo.java           |  39 +--
 .../procedure/env/ConfigNodeProcedureEnv.java      |  22 +-
 .../procedure/env/RegionMaintainHandler.java       |  78 +++---
 .../impl/sync/AuthOperationProcedure.java          |  11 +-
 .../thrift/ConfigNodeRPCServiceProcessor.java      |  12 +
 .../src/assembly/resources/sbin/stop-datanode.bat  |  24 +-
 .../org/apache/iotdb/db/audit/AuditLogger.java     |   1 +
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |  13 +-
 .../iotdb/db/protocol/client/ConfigNodeClient.java |  14 ++
 .../protocol/thrift/impl/ClientRPCServiceImpl.java | 117 +++++++--
 .../impl/DataNodeInternalRPCServiceImpl.java       |  22 ++
 .../iotdb/db/queryengine/plan/Coordinator.java     |   1 -
 .../db/queryengine/plan/analyze/Analysis.java      |  11 +
 .../db/queryengine/plan/analyze/AnalyzeUtils.java  |  64 +++--
 .../queryengine/plan/analyze/AnalyzeVisitor.java   |  49 +++-
 .../db/queryengine/plan/analyze/IAnalysis.java     |  17 +-
 .../plan/analyze/LoadTsfileAnalyzer.java           |   8 +
 .../plan/analyze/schema/ISchemaAutoCreation.java   |   5 +-
 .../plan/analyze/schema/SchemaValidator.java       |   7 +-
 .../plan/execution/config/ConfigTaskVisitor.java   |   8 +
 .../config/executor/ClusterConfigTaskExecutor.java |  87 +++++--
 .../config/executor/IConfigTaskExecutor.java       |   3 +
 ...tleQuotaTask.java => SetConfigurationTask.java} |  17 +-
 .../db/queryengine/plan/parser/ASTVisitor.java     |  20 ++
 .../plan/parser/StatementGenerator.java            |  15 +-
 .../queryengine/plan/planner/LogicalPlanner.java   |   3 +-
 .../distribution/WriteFragmentParallelPlanner.java |  11 +-
 .../plan/planner/plan/node/WritePlanNode.java      |   4 +-
 .../plan/node/load/LoadSingleTsFileNode.java       |   4 +-
 .../planner/plan/node/load/LoadTsFileNode.java     |  10 +-
 .../plan/node/load/LoadTsFilePieceNode.java        |   4 +-
 .../node/metedata/write/ActivateTemplateNode.java  |   4 +-
 .../node/metedata/write/AlterTimeSeriesNode.java   |   4 +-
 .../metedata/write/BatchActivateTemplateNode.java  |   4 +-
 .../write/CreateAlignedTimeSeriesNode.java         |   4 +-
 .../metedata/write/CreateMultiTimeSeriesNode.java  |   4 +-
 .../node/metedata/write/CreateTimeSeriesNode.java  |   4 +-
 .../write/InternalBatchActivateTemplateNode.java   |   4 +-
 .../write/InternalCreateMultiTimeSeriesNode.java   |   4 +-
 .../write/InternalCreateTimeSeriesNode.java        |   4 +-
 .../metedata/write/view/CreateLogicalViewNode.java |   4 +-
 .../plan/node/pipe/PipeEnrichedDeleteDataNode.java |   4 +-
 .../plan/node/pipe/PipeEnrichedInsertNode.java     |   4 +-
 .../plan/node/pipe/PipeEnrichedWritePlanNode.java  |   4 +-
 .../planner/plan/node/write/DeleteDataNode.java    |   5 +-
 .../plan/node/write/InsertMultiTabletsNode.java    |   4 +-
 .../planner/plan/node/write/InsertRowNode.java     |   4 +-
 .../planner/plan/node/write/InsertRowsNode.java    |   4 +-
 .../plan/node/write/InsertRowsOfOneDeviceNode.java |   4 +-
 .../planner/plan/node/write/InsertTabletNode.java  |   4 +-
 .../plan/relational/analyzer/Analysis.java         |  28 +++
 .../relational/analyzer/StatementAnalyzer.java     |  32 +--
 .../metadata/ITableDeviceSchemaValidation.java     |  66 +++++
 .../plan/relational/metadata/Metadata.java         |  30 ++-
 .../relational/metadata/TableMetadataImpl.java     |  13 +
 .../distribute/TableDistributionPlanner.java       |   5 +-
 ...or.java => TableModelQueryFragmentPlanner.java} |   7 +-
 .../plan/relational/sql/ast/InsertTablet.java      |  36 +--
 .../relational/sql/ast/WrappedInsertStatement.java |  96 +++----
 .../plan/relational/sql/ast/WrappedStatement.java  |  13 +-
 .../plan/relational/utils/ConversionUtils.java}    |  12 +-
 .../queryengine/plan/statement/StatementType.java  |   1 +
 .../plan/statement/StatementVisitor.java           |   5 +
 .../plan/statement/crud/InsertBaseStatement.java   |  22 ++
 .../plan/statement/crud/InsertTabletStatement.java |  24 +-
 ...atement.java => SetConfigurationStatement.java} |  30 +--
 .../dag/intermediate/MultiInputLayer.java          |   5 +-
 .../SingleInputMultiReferenceLayer.java            |  12 +-
 .../SingleInputSingleReferenceLayer.java           |  12 +-
 .../iotdb/db/storageengine/StorageEngine.java      |  42 ++++
 .../org/apache/iotdb/db/utils/DateTimeUtils.java   |   4 +-
 .../plan/relational/analyzer/TestMatadata.java     |  14 ++
 iotdb-core/node-commons/pom.xml                    |  76 ++++++
 .../resources/conf/generate_properties.bat         |  64 +++++
 .../assembly/resources/conf/generate_properties.sh |  59 +++++
 .../resources/conf/iotdb-system.properties         |   2 +-
 .../iotdb/commons/conf/CommonDescriptor.java       |   5 +-
 .../commons/conf/ConfigFileAutoUpdateTool.java     | 126 ----------
 .../iotdb/commons/conf/ConfigurationFileUtils.java | 275 +++++++++++++++++++++
 .../commons/partition/SeriesPartitionTable.java    |  28 +--
 .../pipe/connector/protocol/IoTDBConnector.java    |  28 ++-
 .../schema/table/column/TsTableColumnCategory.java |   2 +-
 .../thrift-commons/src/main/thrift/common.thrift   |  18 +-
 .../src/main/thrift/confignode.thrift              |   6 +
 .../thrift-datanode/src/main/thrift/client.thrift  |   4 +
 .../src/main/thrift/datanode.thrift                |   4 +
 114 files changed, 2011 insertions(+), 618 deletions(-)
 create mode 100644 integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSetConfigurationIT.java
 create mode 100644 integration-test/src/test/java/org/apache/iotdb/db/it/udf/IoTDBUDFWindowQuery2IT.java
 copy iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/{quota/SetThrottleQuotaTask.java => SetConfigurationTask.java} (68%)
 create mode 100644 iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/ITableDeviceSchemaValidation.java
 rename iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/{FragmentInstanceGenerator.java => TableModelQueryFragmentPlanner.java} (97%)
 copy iotdb-core/datanode/src/main/java/org/apache/iotdb/db/{audit/AuditLogStorage.java => queryengine/plan/relational/utils/ConversionUtils.java} (84%)
 copy iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/{SetSystemStatusStatement.java => SetConfigurationStatement.java} (71%)
 create mode 100644 iotdb-core/node-commons/src/assembly/resources/conf/generate_properties.bat
 create mode 100644 iotdb-core/node-commons/src/assembly/resources/conf/generate_properties.sh
 delete mode 100644 iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/ConfigFileAutoUpdateTool.java
 create mode 100644 iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/ConfigurationFileUtils.java


(iotdb) 01/02: Merge branch 'master' into ty/TableModelGrammarTest

Posted by ji...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit a8cb529600282a7f3562006fef3a7c15282209a1
Merge: 6c24a6f9ec6 50d8708f2ec
Author: DESKTOP-L0L5GPJ\jt <jt...@163.com>
AuthorDate: Wed Jun 12 14:58:07 2024 +0800

    Merge branch 'master' into ty/TableModelGrammarTest
    
    # Conflicts:
    #       iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/ActiveDeviceRegionScanOperator.java

 distribution/src/assembly/all.xml                  |   9 +
 distribution/src/assembly/confignode.xml           |   9 +
 distribution/src/assembly/datanode.xml             |   9 +
 .../org/apache/iotdb/db/it/IoTDBRepairDataIT.java  |   2 +-
 .../iotdb/db/it/IoTDBSetConfigurationIT.java       |  89 +++++++
 .../java/org/apache/iotdb/db/it/IoTDBSettleIT.java |   2 +-
 .../org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java |   5 +-
 .../db/it/aggregation/IoTDBAggregationIT.java      |  15 +-
 .../db/it/aggregation/maxby/IoTDBMaxByIT.java      |   3 +-
 .../db/it/aggregation/minby/IoTDBMinByIT.java      |   3 +-
 .../iotdb/db/it/udf/IoTDBUDFWindowQuery2IT.java    | 216 ++++++++++++++++
 .../db/it/udf/IoTDBUDTFBuiltinFunctionIT.java      |   4 +-
 .../java/org/apache/iotdb/cli/AbstractCli.java     |  34 ++-
 .../org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java  |   8 +
 .../org/apache/iotdb/rpc/IoTDBJDBCDataSet.java     |   4 +-
 .../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java |   4 +-
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   |  11 +-
 .../assembly/resources/sbin/stop-confignode.bat    |  19 +-
 .../confignode/client/ConfigNodeRequestType.java   |   4 +-
 .../confignode/client/DataNodeRequestType.java     |   2 +
 .../client/async/AsyncDataNodeClientPool.java      |   7 +
 .../client/sync/SyncConfigNodeClientPool.java      |   3 +
 .../client/sync/SyncDataNodeClientPool.java        |   8 +-
 .../confignode/conf/ConfigNodeDescriptor.java      |   6 +-
 .../iotdb/confignode/manager/ConfigManager.java    |  52 ++++
 .../apache/iotdb/confignode/manager/IManager.java  |   8 +
 .../iotdb/confignode/manager/node/NodeManager.java | 107 +++++++-
 .../manager/partition/PartitionManager.java        |   2 +-
 .../persistence/pipe/PipePluginInfo.java           |  39 +--
 .../procedure/env/ConfigNodeProcedureEnv.java      |  22 +-
 .../procedure/env/RegionMaintainHandler.java       |  78 +++---
 .../impl/sync/AuthOperationProcedure.java          |  11 +-
 .../thrift/ConfigNodeRPCServiceProcessor.java      |  12 +
 .../src/assembly/resources/sbin/stop-datanode.bat  |  24 +-
 .../org/apache/iotdb/db/audit/AuditLogger.java     |   1 +
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |  13 +-
 .../iotdb/db/protocol/client/ConfigNodeClient.java |  14 ++
 .../protocol/thrift/impl/ClientRPCServiceImpl.java |  71 +++++-
 .../impl/DataNodeInternalRPCServiceImpl.java       |  22 ++
 .../db/queryengine/plan/analyze/Analysis.java      |  11 +
 .../db/queryengine/plan/analyze/IAnalysis.java     |  15 ++
 .../plan/analyze/LoadTsfileAnalyzer.java           |   8 +
 .../plan/execution/config/ConfigTaskVisitor.java   |   8 +
 .../config/executor/ClusterConfigTaskExecutor.java |  87 +++++--
 .../config/executor/IConfigTaskExecutor.java       |   3 +
 .../execution/config/sys/SetConfigurationTask.java |  45 ++++
 .../db/queryengine/plan/parser/ASTVisitor.java     |  20 ++
 .../distribution/WriteFragmentParallelPlanner.java |  11 +-
 .../plan/planner/plan/node/WritePlanNode.java      |   4 +-
 .../plan/node/load/LoadSingleTsFileNode.java       |   4 +-
 .../planner/plan/node/load/LoadTsFileNode.java     |   9 +-
 .../plan/node/load/LoadTsFilePieceNode.java        |   4 +-
 .../node/metedata/write/ActivateTemplateNode.java  |   4 +-
 .../node/metedata/write/AlterTimeSeriesNode.java   |   4 +-
 .../metedata/write/BatchActivateTemplateNode.java  |   4 +-
 .../write/CreateAlignedTimeSeriesNode.java         |   4 +-
 .../metedata/write/CreateMultiTimeSeriesNode.java  |   4 +-
 .../node/metedata/write/CreateTimeSeriesNode.java  |   4 +-
 .../write/InternalBatchActivateTemplateNode.java   |   4 +-
 .../write/InternalCreateMultiTimeSeriesNode.java   |   4 +-
 .../write/InternalCreateTimeSeriesNode.java        |   4 +-
 .../metedata/write/view/CreateLogicalViewNode.java |   4 +-
 .../plan/node/pipe/PipeEnrichedDeleteDataNode.java |   4 +-
 .../plan/node/pipe/PipeEnrichedInsertNode.java     |   4 +-
 .../plan/node/pipe/PipeEnrichedWritePlanNode.java  |   4 +-
 .../planner/plan/node/write/DeleteDataNode.java    |   5 +-
 .../plan/node/write/InsertMultiTabletsNode.java    |   4 +-
 .../planner/plan/node/write/InsertRowNode.java     |   4 +-
 .../planner/plan/node/write/InsertRowsNode.java    |   4 +-
 .../plan/node/write/InsertRowsOfOneDeviceNode.java |   4 +-
 .../planner/plan/node/write/InsertTabletNode.java  |   4 +-
 .../plan/relational/analyzer/Analysis.java         |  28 +++
 .../metadata/ITableDeviceSchemaValidation.java     |  66 +++++
 .../plan/relational/metadata/Metadata.java         |  29 +++
 .../relational/metadata/TableMetadataImpl.java     |  13 +
 .../distribute/TableDistributionPlanner.java       |   5 +-
 ...or.java => TableModelQueryFragmentPlanner.java} |   7 +-
 .../queryengine/plan/statement/StatementType.java  |   1 +
 .../plan/statement/StatementVisitor.java           |   5 +
 .../statement/sys/SetConfigurationStatement.java   |  72 ++++++
 .../dag/intermediate/MultiInputLayer.java          |   5 +-
 .../SingleInputMultiReferenceLayer.java            |  12 +-
 .../SingleInputSingleReferenceLayer.java           |  12 +-
 .../iotdb/db/storageengine/StorageEngine.java      |  42 ++++
 .../org/apache/iotdb/db/utils/DateTimeUtils.java   |   4 +-
 .../plan/relational/analyzer/TestMatadata.java     |  14 ++
 iotdb-core/node-commons/pom.xml                    |  76 ++++++
 .../resources/conf/generate_properties.bat         |  64 +++++
 .../assembly/resources/conf/generate_properties.sh |  59 +++++
 .../resources/conf/iotdb-system.properties         |   2 +-
 .../iotdb/commons/conf/CommonDescriptor.java       |   5 +-
 .../commons/conf/ConfigFileAutoUpdateTool.java     | 126 ----------
 .../iotdb/commons/conf/ConfigurationFileUtils.java | 275 +++++++++++++++++++++
 .../commons/partition/SeriesPartitionTable.java    |  28 +--
 .../pipe/connector/protocol/IoTDBConnector.java    |  28 ++-
 .../thrift-commons/src/main/thrift/common.thrift   |  18 +-
 .../src/main/thrift/confignode.thrift              |   6 +
 .../thrift-datanode/src/main/thrift/client.thrift  |   4 +
 .../src/main/thrift/datanode.thrift                |   4 +
 99 files changed, 1886 insertions(+), 382 deletions(-)

diff --cc iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
index 823a056df22,4adcd7e298c..97d29a81c7d
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
@@@ -19,14 -19,18 +19,19 @@@
  
  package org.apache.iotdb.db.queryengine.plan.analyze;
  
+ import org.apache.iotdb.common.rpc.thrift.TEndPoint;
  import org.apache.iotdb.common.rpc.thrift.TSStatus;
  import org.apache.iotdb.commons.partition.DataPartition;
+ import org.apache.iotdb.commons.partition.SchemaPartition;
  import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
  import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
+ import org.apache.iotdb.db.queryengine.plan.planner.plan.TimePredicate;
  
 +import org.apache.iotdb.db.queryengine.plan.statement.Statement;
  import org.apache.tsfile.read.common.block.TsBlock;
  
+ import java.util.List;
+ 
  public interface IAnalysis {
  
    boolean isFailed();
@@@ -45,13 -49,13 +50,23 @@@
  
    String getStatementType();
  
 +  void setFinishQueryAfterAnalyze(boolean b);
 +
 +  void setFailStatus(TSStatus status);
 +
 +  boolean isFinishQueryAfterAnalyze();
 +
 +  default void setRealStatement(Statement realStatement) {}
 +
 +  void setDataPartitionInfo(DataPartition dataPartition);
++
+   SchemaPartition getSchemaPartitionInfo();
+ 
+   DataPartition getDataPartitionInfo();
+ 
+   void setRedirectNodeList(List<TEndPoint> redirectNodeList);
+ 
+   void addEndPointToRedirectNodeList(TEndPoint endPoint);
+ 
+   TimePredicate getCovertedTimePredicate();
  }
diff --cc iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
index 1411338c070,dc66581b74c..166a2e4c78b
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
@@@ -73,30 -69,32 +73,59 @@@ public interface Metadata 
        List<Expression> expressionList,
        List<String> attributeColumns);
  
+   /**
+    * This method is used for table column validation and should be invoked before device validation.
+    *
+    * <p>This method return all the existing column schemas in the target table.
+    *
+    * <p>When table or column is missing, this method will execute auto creation.
+    *
+    * <p>When using SQL, the columnSchemaList could be null and there won't be any validation.
+    *
+    * <p>When the input dataType or category of one column is null, the column cannot be auto
+    * created.
+    *
+    * <p>If validation failed, a SemanticException will be thrown.
+    */
+   TableSchema validateTableHeaderSchema(
+       String database, TableSchema tableSchema, MPPQueryContext context);
+ 
+   /**
+    * This method is used for table device validation and should be invoked after column validation.
+    *
+    * <p>When device id is missing, this method will execute auto creation.
+    *
+    * <p>When device attribute is missing or different from that stored in IoTDB, the attribute will
+    * be auto upsert.
+    *
+    * <p>If validation failed, a SemanticException will be thrown.
+    */
+   void validateDeviceSchema(ITableDeviceSchemaValidation schemaValidation, MPPQueryContext context);
++
 +  /**
 +   * Fetch and compute the schema of target timeseries, with device and measurement defined in given
 +   * schemaComputationWithAutoCreation. The computation defined in given
 +   * schemaComputationWithAutoCreation will be executed during scanning the fetched schema. If some
 +   * target timeseries doesn't exist, they will be auto created.
 +   *
 +   * @param schemaComputationWithAutoCreationList define the target devices, measurements and
 +   *     computation
 +   */
 +  default void fetchAndComputeSchemaWithAutoCreate(
 +      List<? extends ISchemaComputationWithAutoCreation> schemaComputationWithAutoCreationList,
 +      MPPQueryContext context) {
 +    throw new UnsupportedOperationException();
 +  }
 +
 +  /**
 +   * Get or create data partition, used in cluster write scenarios. if enableAutoCreateSchema is
 +   * true and database/series/time slots not exists, then automatically create.
 +   *
 +   * @param dataPartitionQueryParams the list of DataPartitionQueryParams
 +   * @param userName
 +   */
 +  default DataPartition getOrCreateDataPartition(
 +      List<DataPartitionQueryParam> dataPartitionQueryParams, String userName) {
 +    throw new UnsupportedOperationException();
 +  }
  }


(iotdb) 02/02: temp save

Posted by ji...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f09ad546ee45dc3d967857eac25bbfd3147e6e48
Author: DESKTOP-L0L5GPJ\jt <jt...@163.com>
AuthorDate: Thu Jun 13 16:45:27 2024 +0800

    temp save
---
 .../protocol/thrift/impl/ClientRPCServiceImpl.java | 46 ++++++-----
 .../iotdb/db/queryengine/plan/Coordinator.java     |  1 -
 .../db/queryengine/plan/analyze/AnalyzeUtils.java  | 64 +++++++++------
 .../queryengine/plan/analyze/AnalyzeVisitor.java   | 49 ++++++++---
 .../db/queryengine/plan/analyze/IAnalysis.java     |  2 +-
 .../plan/analyze/schema/ISchemaAutoCreation.java   |  5 +-
 .../plan/analyze/schema/SchemaValidator.java       |  7 +-
 .../plan/parser/StatementGenerator.java            | 15 ++--
 .../queryengine/plan/planner/LogicalPlanner.java   |  3 +-
 .../planner/plan/node/load/LoadTsFileNode.java     |  7 +-
 .../relational/analyzer/StatementAnalyzer.java     | 32 +++-----
 .../plan/relational/metadata/Metadata.java         |  1 -
 .../plan/relational/sql/ast/InsertTablet.java      | 36 ++++----
 .../relational/sql/ast/WrappedInsertStatement.java | 96 +++++++---------------
 .../plan/relational/sql/ast/WrappedStatement.java  | 13 ++-
 .../utils/ConversionUtils.java}                    | 30 ++-----
 .../plan/statement/crud/InsertBaseStatement.java   | 22 +++++
 .../plan/statement/crud/InsertTabletStatement.java | 24 +-----
 .../schema/table/column/TsTableColumnCategory.java |  2 +-
 19 files changed, 221 insertions(+), 234 deletions(-)

diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index ae4339991b7..0455eb26069 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -733,7 +733,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
                 true,
                 true),
             AggregationStep.SINGLE,
-            Collections.singletonList(new InputLocation[]{new InputLocation(0, 0)}));
+            Collections.singletonList(new InputLocation[] {new InputLocation(0, 0)}));
 
     GroupByTimeParameter groupByTimeParameter =
         new GroupByTimeParameter(
@@ -761,7 +761,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
               DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
               !TSDataType.BLOB.equals(dataType)
                   || (!TAggregationType.LAST_VALUE.equals(aggregationType)
-                  && !TAggregationType.FIRST_VALUE.equals(aggregationType)));
+                      && !TAggregationType.FIRST_VALUE.equals(aggregationType)));
     } else {
       path = new NonAlignedFullPath(Factory.DEFAULT_FACTORY.create(device), measurementSchema);
       operator =
@@ -777,7 +777,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
               DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
               !TSDataType.BLOB.equals(dataType)
                   || (!TAggregationType.LAST_VALUE.equals(aggregationType)
-                  && !TAggregationType.FIRST_VALUE.equals(aggregationType)));
+                      && !TAggregationType.FIRST_VALUE.equals(aggregationType)));
     }
 
     try {
@@ -1222,7 +1222,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
   public TSStatus closeSession(TSCloseSessionReq req) {
     return new TSStatus(
         !SESSION_MANAGER.closeSession(
-            SESSION_MANAGER.getCurrSession(), COORDINATOR::cleanupQueryExecution)
+                SESSION_MANAGER.getCurrSession(), COORDINATOR::cleanupQueryExecution)
             ? RpcUtils.getStatus(TSStatusCode.NOT_LOGIN)
             : RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS));
   }
@@ -2080,19 +2080,25 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
       long queryId = SESSION_MANAGER.requestQueryId();
       ExecutionResult result;
       if (statement.isWriteToTable()) {
-        result = COORDINATOR.executeForTableModel(statement,
-            relationSqlParser, clientSession,
-            queryId,
-            SESSION_MANAGER.getSessionInfo(clientSession), "", metadata,
-            config.getConnectionTimeoutInMS());
+        result =
+            COORDINATOR.executeForTableModel(
+                statement,
+                relationSqlParser,
+                clientSession,
+                queryId,
+                SESSION_MANAGER.getSessionInfo(clientSession),
+                "",
+                metadata,
+                config.getConnectionTimeoutInMS());
       } else {
-        result = COORDINATOR.executeForTreeModel(
-            statement,
-            queryId,
-            SESSION_MANAGER.getSessionInfo(clientSession),
-            "",
-            partitionFetcher,
-            schemaFetcher);
+        result =
+            COORDINATOR.executeForTreeModel(
+                statement,
+                queryId,
+                SESSION_MANAGER.getSessionInfo(clientSession),
+                "",
+                partitionFetcher,
+                schemaFetcher);
       }
       return result.status;
     } catch (IoTDBException e) {
@@ -2822,9 +2828,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
         "Log in failed. Either you are not authorized or the session has timed out.");
   }
 
-  /**
-   * Add stat of whole stage query into metrics
-   */
+  /** Add stat of whole stage query into metrics */
   private void addQueryLatency(StatementType statementType, long costTimeInNanos) {
     if (statementType == null) {
       return;
@@ -2842,9 +2846,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
             statementType.name());
   }
 
-  /**
-   * Add stat of operation into metrics
-   */
+  /** Add stat of operation into metrics */
   private void addStatementExecutionLatency(
       OperationType operation, String statementType, long costTime) {
     if (statementType == null) {
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 fe20273f183..180edcea95d 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
@@ -340,7 +340,6 @@ public class Coordinator {
     return new QueryExecution(relationalModelPlanner, queryContext, executor);
   }
 
-
   public IQueryExecution getQueryExecution(Long queryId) {
     return queryExecutionMap.get(queryId);
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtils.java
index f1b9210c216..0728af062db 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtils.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtils.java
@@ -19,13 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.analyze;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
 import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
 import org.apache.iotdb.commons.exception.IoTDBException;
 import org.apache.iotdb.commons.partition.DataPartition;
@@ -40,9 +33,18 @@ import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowsStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
 import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 public class AnalyzeUtils {
 
   private static final PerformanceOverviewMetrics PERFORMANCE_OVERVIEW_METRICS =
@@ -53,16 +55,21 @@ public class AnalyzeUtils {
     // util class
   }
 
-  public static void analyzeInsert(MPPQueryContext context,
-      InsertBaseStatement insertBaseStatement, Runnable schemaValidation,
-      DataPartitionQueryFunc partitionFetcher, IAnalysis analysis) {
+  public static InsertBaseStatement analyzeInsert(
+      MPPQueryContext context,
+      InsertBaseStatement insertBaseStatement,
+      Runnable schemaValidation,
+      DataPartitionQueryFunc partitionFetcher,
+      IAnalysis analysis,
+      boolean removeLogicalView) {
     context.setQueryType(QueryType.WRITE);
     insertBaseStatement.semanticCheck();
-    validateSchema(analysis, insertBaseStatement,
-        schemaValidation);
-    InsertBaseStatement realStatement = removeLogicalView(analysis, insertBaseStatement);
+    validateSchema(analysis, insertBaseStatement, schemaValidation);
+
+    InsertBaseStatement realStatement =
+        removeLogicalView ? removeLogicalView(analysis, insertBaseStatement) : insertBaseStatement;
     if (analysis.isFinishQueryAfterAnalyze()) {
-      return;
+      return realStatement;
     }
     analysis.setRealStatement(realStatement);
 
@@ -77,18 +84,20 @@ public class AnalyzeUtils {
       getAnalysisForWriting(
           analysis,
           Collections.singletonList(dataPartitionQueryParam),
-          context.getSession().getUserName(), partitionFetcher);
+          context.getSession().getUserName(),
+          partitionFetcher);
     } else {
       computeAnalysisForMultiTablets(
           analysis,
           (InsertMultiTabletsStatement) realStatement,
-          context.getSession().getUserName(), partitionFetcher);
+          context.getSession().getUserName(),
+          partitionFetcher);
     }
+    return realStatement;
   }
 
   public static void validateSchema(
-      IAnalysis analysis, InsertBaseStatement insertStatement,
-      Runnable schemaValidation) {
+      IAnalysis analysis, InsertBaseStatement insertStatement, Runnable schemaValidation) {
     final long startTime = System.nanoTime();
     try {
       schemaValidation.run();
@@ -136,7 +145,9 @@ public class AnalyzeUtils {
 
   /** get analysis according to statement and params */
   public static void getAnalysisForWriting(
-      IAnalysis analysis, List<DataPartitionQueryParam> dataPartitionQueryParams, String userName,
+      IAnalysis analysis,
+      List<DataPartitionQueryParam> dataPartitionQueryParams,
+      String userName,
       DataPartitionQueryFunc partitionQueryFunc) {
 
     DataPartition dataPartition =
@@ -153,7 +164,9 @@ public class AnalyzeUtils {
   }
 
   public static void computeAnalysisForInsertRows(
-      IAnalysis analysis, InsertRowsStatement insertRowsStatement, String userName,
+      IAnalysis analysis,
+      InsertRowsStatement insertRowsStatement,
+      String userName,
       DataPartitionQueryFunc partitionFetcher) {
     Map<String, Set<TTimePartitionSlot>> dataPartitionQueryParamMap = new HashMap<>();
     for (InsertRowStatement insertRowStatement : insertRowsStatement.getInsertRowStatementList()) {
@@ -175,8 +188,10 @@ public class AnalyzeUtils {
   }
 
   public static void computeAnalysisForMultiTablets(
-      IAnalysis analysis, InsertMultiTabletsStatement insertMultiTabletsStatement, String userName
-      , DataPartitionQueryFunc partitionFetcher) {
+      IAnalysis analysis,
+      InsertMultiTabletsStatement insertMultiTabletsStatement,
+      String userName,
+      DataPartitionQueryFunc partitionFetcher) {
     Map<String, Set<TTimePartitionSlot>> dataPartitionQueryParamMap = new HashMap<>();
     for (InsertTabletStatement insertTabletStatement :
         insertMultiTabletsStatement.getInsertTabletStatementList()) {
@@ -198,7 +213,8 @@ public class AnalyzeUtils {
   }
 
   public interface DataPartitionQueryFunc {
-    DataPartition queryDataPartition(List<DataPartitionQueryParam> dataPartitionQueryParams,
-        String userName);
+
+    DataPartition queryDataPartition(
+        List<DataPartitionQueryParam> dataPartitionQueryParams, String userName);
   }
 }
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 f8904a2b448..33247de6a9e 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
@@ -2618,9 +2618,13 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
   public Analysis visitInsertTablet(
       InsertTabletStatement insertTabletStatement, MPPQueryContext context) {
     Analysis analysis = new Analysis();
-    AnalyzeUtils.analyzeInsert(context, insertTabletStatement,
+    AnalyzeUtils.analyzeInsert(
+        context,
+        insertTabletStatement,
         () -> SchemaValidator.validate(schemaFetcher, insertTabletStatement, context),
-        partitionFetcher::getOrCreateDataPartition, analysis);
+        partitionFetcher::getOrCreateDataPartition,
+        analysis,
+        true);
     return analysis;
   }
 
@@ -2629,7 +2633,9 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
     context.setQueryType(QueryType.WRITE);
     insertRowStatement.semanticCheck();
     Analysis analysis = new Analysis();
-    validateSchema(analysis, insertRowStatement,
+    validateSchema(
+        analysis,
+        insertRowStatement,
         () -> SchemaValidator.validate(schemaFetcher, insertRowStatement, context));
     InsertBaseStatement realInsertStatement = removeLogicalView(analysis, insertRowStatement);
     if (analysis.isFinishQueryAfterAnalyze()) {
@@ -2647,11 +2653,14 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
       getAnalysisForWriting(
           analysis,
           Collections.singletonList(dataPartitionQueryParam),
-          context.getSession().getUserName(), partitionFetcher::getOrCreateDataPartition);
+          context.getSession().getUserName(),
+          partitionFetcher::getOrCreateDataPartition);
     } else {
       computeAnalysisForInsertRows(
-          analysis, (InsertRowsStatement) realInsertStatement, context.getSession().getUserName()
-          , partitionFetcher::getOrCreateDataPartition);
+          analysis,
+          (InsertRowsStatement) realInsertStatement,
+          context.getSession().getUserName(),
+          partitionFetcher::getOrCreateDataPartition);
     }
     return analysis;
   }
@@ -2662,7 +2671,9 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
     context.setQueryType(QueryType.WRITE);
     insertRowsStatement.semanticCheck();
     Analysis analysis = new Analysis();
-    validateSchema(analysis, insertRowsStatement,
+    validateSchema(
+        analysis,
+        insertRowsStatement,
         () -> SchemaValidator.validate(schemaFetcher, insertRowsStatement, context));
     InsertRowsStatement realInsertRowsStatement =
         (InsertRowsStatement) removeLogicalView(analysis, insertRowsStatement);
@@ -2672,7 +2683,10 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
     analysis.setRealStatement(realInsertRowsStatement);
 
     computeAnalysisForInsertRows(
-        analysis, realInsertRowsStatement, context.getSession().getUserName(), partitionFetcher::getOrCreateDataPartition);
+        analysis,
+        realInsertRowsStatement,
+        context.getSession().getUserName(),
+        partitionFetcher::getOrCreateDataPartition);
     return analysis;
   }
 
@@ -2682,7 +2696,9 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
     context.setQueryType(QueryType.WRITE);
     insertMultiTabletsStatement.semanticCheck();
     Analysis analysis = new Analysis();
-    validateSchema(analysis, insertMultiTabletsStatement,
+    validateSchema(
+        analysis,
+        insertMultiTabletsStatement,
         () -> SchemaValidator.validate(schemaFetcher, insertMultiTabletsStatement, context));
     InsertMultiTabletsStatement realStatement =
         (InsertMultiTabletsStatement) removeLogicalView(analysis, insertMultiTabletsStatement);
@@ -2692,7 +2708,10 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
     analysis.setRealStatement(realStatement);
 
     computeAnalysisForMultiTablets(
-        analysis, realStatement, context.getSession().getUserName(), partitionFetcher::getOrCreateDataPartition);
+        analysis,
+        realStatement,
+        context.getSession().getUserName(),
+        partitionFetcher::getOrCreateDataPartition);
     return analysis;
   }
 
@@ -2702,7 +2721,9 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
     context.setQueryType(QueryType.WRITE);
     insertRowsOfOneDeviceStatement.semanticCheck();
     Analysis analysis = new Analysis();
-    validateSchema(analysis, insertRowsOfOneDeviceStatement,
+    validateSchema(
+        analysis,
+        insertRowsOfOneDeviceStatement,
         () -> SchemaValidator.validate(schemaFetcher, insertRowsOfOneDeviceStatement, context));
     InsertBaseStatement realInsertStatement =
         removeLogicalView(analysis, insertRowsOfOneDeviceStatement);
@@ -2725,8 +2746,10 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
           partitionFetcher::getOrCreateDataPartition);
     } else {
       computeAnalysisForInsertRows(
-          analysis, (InsertRowsStatement) realInsertStatement, context.getSession().getUserName()
-          , partitionFetcher::getOrCreateDataPartition);
+          analysis,
+          (InsertRowsStatement) realInsertStatement,
+          context.getSession().getUserName(),
+          partitionFetcher::getOrCreateDataPartition);
     }
     return analysis;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
index 97d29a81c7d..23a04679e64 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
@@ -26,8 +26,8 @@ import org.apache.iotdb.commons.partition.SchemaPartition;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.TimePredicate;
-
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
+
 import org.apache.tsfile.read.common.block.TsBlock;
 
 import java.util.List;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java
index 55f8dd5210c..1d6468583ad 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java
@@ -39,8 +39,9 @@ public interface ISchemaAutoCreation {
 
   TSDataType getDataType(int index);
 
-  //TODO: Check necessity because all implementations return null
+  // TODO: Check necessity because all implementations return null
   TSEncoding getEncoding(int index);
-  //TODO: Check necessity because all implementations return null
+
+  // TODO: Check necessity because all implementations return null
   CompressionType getCompressionType(int index);
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/SchemaValidator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/SchemaValidator.java
index 1406698cc42..96c55a05b0e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/SchemaValidator.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/SchemaValidator.java
@@ -60,15 +60,16 @@ public class SchemaValidator {
   public static void validate(
       Metadata metadata, WrappedInsertStatement insertStatement, MPPQueryContext context) {
     try {
-      metadata.fetchAndComputeSchemaWithAutoCreate(insertStatement.getSchemaValidationList(),
-          context);
+      String databaseName = context.getSession().getDatabaseName().get();
+      //      metadata.validateTableHeaderSchema(databaseName);
+      //      metadata.fetchAndComputeSchemaWithAutoCreate(
+      //          insertStatement.getSchemaValidationList(), context);
       insertStatement.updateAfterSchemaValidation(context);
     } catch (QueryProcessException e) {
       throw new SemanticException(e.getMessage());
     }
   }
 
-
   public static ISchemaTree validate(
       ISchemaFetcher schemaFetcher,
       List<PartialPath> devicePaths,
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGenerator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGenerator.java
index 288f54fd77c..ef4314b4d24 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGenerator.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGenerator.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.common.rpc.thrift.TAggregationType;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
 import org.apache.iotdb.commons.service.metric.PerformanceOverviewMetrics;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.qp.sql.IoTDBSqlParser;
@@ -35,7 +36,6 @@ import org.apache.iotdb.db.queryengine.plan.expression.leaf.ConstantOperand;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimestampOperand;
 import org.apache.iotdb.db.queryengine.plan.expression.multi.FunctionExpression;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ColumnDefinition.ColumnCategory;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.component.FromComponent;
 import org.apache.iotdb.db.queryengine.plan.statement.component.GroupByTimeComponent;
@@ -338,13 +338,16 @@ public class StatementGenerator {
     insertStatement.setAligned(insertTabletReq.isAligned);
     insertStatement.setWriteToTable(insertTabletReq.isWriteToTable());
     if (insertTabletReq.isWriteToTable()) {
-      if (!insertTabletReq.isSetColumnCategories() || insertTabletReq.getColumnCategoriesSize() != insertTabletReq.getMeasurementsSize()) {
-        throw new IllegalArgumentException("Missing or invalid column categories for table "
-            + "insertion");
+      if (!insertTabletReq.isSetColumnCategories()
+          || insertTabletReq.getColumnCategoriesSize() != insertTabletReq.getMeasurementsSize()) {
+        throw new IllegalArgumentException(
+            "Missing or invalid column categories for table " + "insertion");
       }
-      ColumnCategory[] columnCategories = new ColumnCategory[insertTabletReq.columnCategories.size()];
+      TsTableColumnCategory[] columnCategories =
+          new TsTableColumnCategory[insertTabletReq.columnCategories.size()];
       for (int i = 0; i < columnCategories.length; i++) {
-        columnCategories[i] = ColumnCategory.values()[insertTabletReq.getColumnCategories().get(i)];
+        columnCategories[i] =
+            TsTableColumnCategory.deserialize(insertTabletReq.getColumnCategories().get(i));
       }
       insertStatement.setColumnCategories(columnCategories);
     }
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 64f6b273176..65f28cd4a9e 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
@@ -45,7 +45,8 @@ public class LogicalPlanner {
 
   public LogicalQueryPlan plan(Analysis analysis) {
     long startTime = System.nanoTime();
-    PlanNode rootNode = new LogicalPlanVisitor(analysis).process(analysis.getTreeStatement(), context);
+    PlanNode rootNode =
+        new LogicalPlanVisitor(analysis).process(analysis.getTreeStatement(), context);
 
     // optimize the query logical plan
     if (analysis.isQuery()) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadTsFileNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadTsFileNode.java
index 540f9e4d9f6..be5de4cc819 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadTsFileNode.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadTsFileNode.java
@@ -92,10 +92,11 @@ public class LoadTsFileNode extends WritePlanNode {
   public List<WritePlanNode> splitByPartition(IAnalysis analysis) {
     List<WritePlanNode> res = new ArrayList<>();
     LoadTsFileStatement statement =
-        ((Analysis) analysis).getStatement() instanceof PipeEnrichedStatement
+        ((Analysis) analysis).getTreeStatement() instanceof PipeEnrichedStatement
             ? (LoadTsFileStatement)
-                ((PipeEnrichedStatement) ((Analysis) analysis).getStatement()).getInnerStatement()
-            : (LoadTsFileStatement) ((Analysis) analysis).getStatement();
+                ((PipeEnrichedStatement) ((Analysis) analysis).getTreeStatement())
+                    .getInnerStatement()
+            : (LoadTsFileStatement) ((Analysis) analysis).getTreeStatement();
 
     for (int i = 0; i < resources.size(); i++) {
       res.add(
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
index 9ba4c068c7f..e6bd82bfe25 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
@@ -19,8 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
 
-import java.util.Collections;
-import org.apache.iotdb.commons.partition.DataPartitionQueryParam;
 import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
 import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
@@ -28,8 +26,6 @@ import org.apache.iotdb.db.queryengine.common.SessionInfo;
 import org.apache.iotdb.db.queryengine.execution.warnings.IoTDBWarning;
 import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
 import org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeUtils;
-import org.apache.iotdb.db.queryengine.plan.analyze.IAnalysis;
-import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.analyze.schema.SchemaValidator;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
@@ -105,6 +101,7 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Values;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.With;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WithQuery;
+import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertBaseStatement;
 
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ImmutableList;
@@ -114,9 +111,6 @@ import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Streams;
-import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertBaseStatement;
-import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertMultiTabletsStatement;
-import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
 import org.apache.tsfile.read.common.type.RowType;
 import org.apache.tsfile.read.common.type.Type;
 
@@ -145,10 +139,6 @@ import static java.util.Collections.emptyList;
 import static java.util.Locale.ENGLISH;
 import static java.util.Objects.requireNonNull;
 import static org.apache.iotdb.db.queryengine.execution.warnings.StandardWarningCode.REDUNDANT_ORDER_BY;
-import static org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeUtils.computeAnalysisForMultiTablets;
-import static org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeUtils.getAnalysisForWriting;
-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.relational.analyzer.AggregationAnalyzer.verifyOrderByAggregations;
 import static org.apache.iotdb.db.queryengine.plan.relational.analyzer.AggregationAnalyzer.verifySourceAggregations;
 import static org.apache.iotdb.db.queryengine.plan.relational.analyzer.CanonicalizationAware.canonicalizationAwareKey;
@@ -372,14 +362,18 @@ public class StatementAnalyzer {
       final Scope ret = Scope.create();
 
       final MPPQueryContext context = insert.getContext();
-      final InsertTabletStatement insertTabletStatement = insert.getInnerTreeStatement();
-
-      IAnalysis analysis = AnalyzeUtils.analyzeInsert(context, insertTabletStatement,
-          () -> SchemaValidator.validate(metadata, insert, context),
-          metadata::getOrCreateDataPartition);
+      InsertBaseStatement insertTabletStatement = insert.getInnerTreeStatement();
+
+      insertTabletStatement =
+          AnalyzeUtils.analyzeInsert(
+              context,
+              insertTabletStatement,
+              () -> SchemaValidator.validate(metadata, insert, context),
+              metadata::getOrCreateDataPartition,
+              analysis,
+              false);
+      insert.setInnerTreeStatement(insertTabletStatement);
 
-      // TODO-TableIngestion: use IAnalysis
-      // StatementAnalyzer.this.analysis = analysis;
       return ret;
     }
 
@@ -1996,7 +1990,7 @@ public class StatementAnalyzer {
 
     /**
      * @return true if the Query / QuerySpecification containing the analyzed Limit or FetchFirst,
-     * must contain orderBy (i.e., for FetchFirst with ties).
+     *     must contain orderBy (i.e., for FetchFirst with ties).
      */
     private boolean analyzeLimit(Node node, Scope scope) {
       //      checkState(
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
index 166a2e4c78b..91acf28da3f 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
@@ -19,7 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.metadata;
 
-import java.util.Map;
 import org.apache.iotdb.commons.partition.DataPartition;
 import org.apache.iotdb.commons.partition.DataPartitionQueryParam;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InsertTablet.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InsertTablet.java
index 38a423fae21..de0f00a73a9 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InsertTablet.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InsertTablet.java
@@ -19,26 +19,25 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.schematree.IMeasurementSchemaInfo;
 import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaComputationWithAutoCreation;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
+
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.utils.Pair;
 
-public class InsertTablet extends WrappedInsertStatement {
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
-  private InsertTabletStatement insertTabletStatement;
+public class InsertTablet extends WrappedInsertStatement {
 
   public InsertTablet(InsertTabletStatement insertTabletStatement, MPPQueryContext context) {
     super(insertTabletStatement, context);
-    this.insertTabletStatement = insertTabletStatement;
   }
 
   @Override
@@ -48,11 +47,12 @@ public class InsertTablet extends WrappedInsertStatement {
 
   @Override
   public InsertTabletStatement getInnerTreeStatement() {
-    return insertTabletStatement;
+    return ((InsertTabletStatement) super.getInnerTreeStatement());
   }
 
   @Override
   public List<ISchemaComputationWithAutoCreation> getSchemaValidationList() {
+    InsertTabletStatement insertTabletStatement = getInnerTreeStatement();
     Map<IDeviceID, ISchemaComputationWithAutoCreation> map = new HashMap<>();
     for (int i = 0; i < insertTabletStatement.getRowCount(); i++) {
       map.computeIfAbsent(insertTabletStatement.getTableDeviceID(i), this::getSchemaComputation);
@@ -62,7 +62,7 @@ public class InsertTablet extends WrappedInsertStatement {
 
   @Override
   public void updateAfterSchemaValidation(MPPQueryContext context) throws QueryProcessException {
-    insertTabletStatement.updateAfterSchemaValidation(context);
+    getInnerTreeStatement().updateAfterSchemaValidation(context);
   }
 
   @Override
@@ -78,38 +78,38 @@ public class InsertTablet extends WrappedInsertStatement {
 
     @Override
     public void computeMeasurement(int index, IMeasurementSchemaInfo measurementSchemaInfo) {
-      insertTabletStatement.computeMeasurement(index, measurementSchemaInfo);
+      getInnerTreeStatement().computeMeasurement(index, measurementSchemaInfo);
     }
 
     @Override
     public boolean hasLogicalViewNeedProcess() {
-      return insertTabletStatement.hasLogicalViewNeedProcess();
+      return getInnerTreeStatement().hasLogicalViewNeedProcess();
     }
 
     @Override
     public List<LogicalViewSchema> getLogicalViewSchemaList() {
-      return insertTabletStatement.getLogicalViewSchemaList();
+      return getInnerTreeStatement().getLogicalViewSchemaList();
     }
 
     @Override
     public List<Integer> getIndexListOfLogicalViewPaths() {
-      return insertTabletStatement.getIndexListOfLogicalViewPaths();
+      return getInnerTreeStatement().getIndexListOfLogicalViewPaths();
     }
 
     @Override
     public void recordRangeOfLogicalViewSchemaListNow() {
-      insertTabletStatement.recordRangeOfLogicalViewSchemaListNow();
+      getInnerTreeStatement().recordRangeOfLogicalViewSchemaListNow();
     }
 
     @Override
     public Pair<Integer, Integer> getRangeOfLogicalViewSchemaListRecorded() {
-      return insertTabletStatement.getRangeOfLogicalViewSchemaListRecorded();
+      return getInnerTreeStatement().getRangeOfLogicalViewSchemaListRecorded();
     }
 
     @Override
-    public void computeMeasurementOfView(int index, IMeasurementSchemaInfo measurementSchemaInfo,
-        boolean isAligned) {
-      insertTabletStatement.computeMeasurementOfView(index, measurementSchemaInfo, isAligned);
+    public void computeMeasurementOfView(
+        int index, IMeasurementSchemaInfo measurementSchemaInfo, boolean isAligned) {
+      getInnerTreeStatement().computeMeasurementOfView(index, measurementSchemaInfo, isAligned);
     }
   }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
index e57e7b55c40..7d91727f571 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
@@ -1,89 +1,49 @@
 package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
 
-import java.util.List;
-import org.apache.iotdb.commons.exception.IllegalPathException;
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
-import org.apache.iotdb.db.queryengine.common.schematree.IMeasurementSchemaInfo;
-import org.apache.iotdb.db.queryengine.execution.schedule.queue.ID;
-import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaComputationWithAutoCreation;
+import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
+import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableSchema;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertBaseStatement;
-import org.apache.tsfile.enums.TSDataType;
-import org.apache.tsfile.file.metadata.IDeviceID;
-import org.apache.tsfile.file.metadata.enums.CompressionType;
-import org.apache.tsfile.file.metadata.enums.TSEncoding;
-import org.apache.tsfile.utils.Pair;
+
+import org.apache.tsfile.read.common.type.TypeFactory;
+
+import java.util.ArrayList;
+import java.util.List;
 
 public abstract class WrappedInsertStatement extends WrappedStatement {
 
-  protected InsertBaseStatement insertStatement;
+  protected TableSchema tableSchema;
 
-  public WrappedInsertStatement(
-      InsertBaseStatement innerTreeStatement,
-      MPPQueryContext context) {
+  public WrappedInsertStatement(InsertBaseStatement innerTreeStatement, MPPQueryContext context) {
     super(innerTreeStatement, context);
-    this.insertStatement = innerTreeStatement;
   }
 
   @Override
   public InsertBaseStatement getInnerTreeStatement() {
-    return insertStatement;
+    return ((InsertBaseStatement) super.getInnerTreeStatement());
   }
 
-  public abstract List<ISchemaComputationWithAutoCreation> getSchemaValidationList();
-
-  public abstract void updateAfterSchemaValidation(MPPQueryContext context) throws QueryProcessException;
-
-  public abstract ISchemaComputationWithAutoCreation getSchemaComputation(IDeviceID deviceID);
-
-  public abstract class BasicSchemaExecutions implements ISchemaComputationWithAutoCreation {
-    protected IDeviceID deviceID;
-
-    public BasicSchemaExecutions(IDeviceID deviceID) {
-      this.deviceID = deviceID;
-    }
-
-    @Override
-    public boolean isAligned() {
-      return true;
-    }
-
-    @Override
-    public TSDataType getDataType(int index) {
-      return insertStatement.getDataTypes()[index];
-    }
-
-    @Override
-    public TSEncoding getEncoding(int index) {
-      return null;
-    }
-
-    @Override
-    public CompressionType getCompressionType(int index) {
-      return null;
-    }
-
-    @Override
-    public PartialPath getDevicePath() {
-      //TODO-TableInsertion: use deviceId
-      try {
-        return new PartialPath(deviceID);
-      } catch (IllegalPathException e) {
-        throw new RuntimeException(e);
+  public abstract void updateAfterSchemaValidation(MPPQueryContext context)
+      throws QueryProcessException;
+
+  public TableSchema getTableSchema() {
+    if (tableSchema == null) {
+      InsertBaseStatement insertBaseStatement = getInnerTreeStatement();
+      String tableName = insertBaseStatement.getDevicePath().getFullPath();
+      List<ColumnSchema> columnSchemas =
+          new ArrayList<>(insertBaseStatement.getMeasurements().length);
+      for (int i = 0; i < insertBaseStatement.getMeasurements().length; i++) {
+        columnSchemas.add(
+            new ColumnSchema(
+                insertBaseStatement.getMeasurements()[i],
+                TypeFactory.getType(insertBaseStatement.getDataTypes()[i]),
+                false,
+                insertBaseStatement.getColumnCategories()[i]));
       }
+      tableSchema = new TableSchema(tableName, columnSchemas);
     }
 
-    @Override
-    public String[] getMeasurements() {
-      return insertStatement.getMeasurements();
-    }
-
-    @Override
-    public void computeDevice(boolean isAligned) {
-      // ignored, table device must be aligned
-    }
-
+    return tableSchema;
   }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java
index 380388ee141..5998e07c289 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java
@@ -19,16 +19,18 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
 
+import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
+
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
-import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 
 public abstract class WrappedStatement extends Statement {
-  protected final org.apache.iotdb.db.queryengine.plan.statement.Statement innerTreeStatement;
+  protected org.apache.iotdb.db.queryengine.plan.statement.Statement innerTreeStatement;
   protected final MPPQueryContext context;
 
-  public WrappedStatement(org.apache.iotdb.db.queryengine.plan.statement.Statement innerTreeStatement,
+  public WrappedStatement(
+      org.apache.iotdb.db.queryengine.plan.statement.Statement innerTreeStatement,
       MPPQueryContext context) {
     super(null);
     this.innerTreeStatement = innerTreeStatement;
@@ -66,6 +68,11 @@ public abstract class WrappedStatement extends Statement {
     return innerTreeStatement;
   }
 
+  public void setInnerTreeStatement(
+      org.apache.iotdb.db.queryengine.plan.statement.Statement innerTreeStatement) {
+    this.innerTreeStatement = innerTreeStatement;
+  }
+
   public MPPQueryContext getContext() {
     return context;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/utils/ConversionUtils.java
similarity index 51%
copy from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java
copy to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/utils/ConversionUtils.java
index 55f8dd5210c..48aaa6fef40 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/utils/ConversionUtils.java
@@ -17,30 +17,10 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.analyze.schema;
+package org.apache.iotdb.db.queryengine.plan.relational.utils;
 
-import org.apache.iotdb.commons.path.PartialPath;
-
-import org.apache.tsfile.enums.TSDataType;
-import org.apache.tsfile.file.metadata.enums.CompressionType;
-import org.apache.tsfile.file.metadata.enums.TSEncoding;
-
-/**
- * This interface defines the required info provided for schema auto creation, which is executed
- * schema fetcher.
- */
-public interface ISchemaAutoCreation {
-
-  PartialPath getDevicePath();
-
-  String[] getMeasurements();
-
-  boolean isAligned();
-
-  TSDataType getDataType(int index);
-
-  //TODO: Check necessity because all implementations return null
-  TSEncoding getEncoding(int index);
-  //TODO: Check necessity because all implementations return null
-  CompressionType getCompressionType(int index);
+public class ConversionUtils {
+  private ConversionUtils() {
+    // util class
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
index bc31e71ec80..6a48221189e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.db.queryengine.plan.statement.crud;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
 import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
 import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -68,6 +69,9 @@ public abstract class InsertBaseStatement extends Statement {
   /** index of failed measurements -> info including measurement, data type and value */
   protected Map<Integer, FailedMeasurementInfo> failedMeasurementIndex2Info;
 
+  protected TsTableColumnCategory[] columnCategories;
+  protected List<Integer> idColumnIndices;
+
   // region params used by analyzing logical views.
 
   /** This param records the logical view schema appeared in this statement. */
@@ -238,6 +242,24 @@ public abstract class InsertBaseStatement extends Statement {
     return false;
   }
 
+  public TsTableColumnCategory[] getColumnCategories() {
+    return columnCategories;
+  }
+
+  public void setColumnCategories(TsTableColumnCategory[] columnCategories) {
+    this.columnCategories = columnCategories;
+    idColumnIndices = new ArrayList<>();
+    for (int i = 0; i < columnCategories.length; i++) {
+      if (columnCategories[i].equals(TsTableColumnCategory.ID)) {
+        idColumnIndices.add(i);
+      }
+    }
+  }
+
+  public List<Integer> getIdColumnIndices() {
+    return idColumnIndices;
+  }
+
   public boolean hasFailedMeasurements() {
     return failedMeasurementIndex2Info != null && !failedMeasurementIndex2Info.isEmpty();
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertTabletStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertTabletStatement.java
index 53b60b67494..fa9e8959c01 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertTabletStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertTabletStatement.java
@@ -29,7 +29,6 @@ import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.schematree.IMeasurementSchemaInfo;
 import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaValidation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ColumnDefinition.ColumnCategory;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
@@ -38,7 +37,6 @@ import org.apache.iotdb.db.utils.CommonUtils;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.file.metadata.IDeviceID.Factory;
-import org.apache.tsfile.file.metadata.StringArrayDeviceID;
 import org.apache.tsfile.file.metadata.enums.CompressionType;
 import org.apache.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.tsfile.utils.Binary;
@@ -66,8 +64,6 @@ public class InsertTabletStatement extends InsertBaseStatement implements ISchem
   private BitMap[] bitMaps;
   private Object[] columns;
 
-  private ColumnCategory[] columnCategories;
-  private List<Integer> idColumnIndices;
   private IDeviceID[] deviceIDs;
 
   private int rowCount = 0;
@@ -77,6 +73,7 @@ public class InsertTabletStatement extends InsertBaseStatement implements ISchem
    * views.
    */
   private boolean[] measurementIsAligned;
+
   private boolean writeToTable = false;
 
   public InsertTabletStatement() {
@@ -425,25 +422,6 @@ public class InsertTabletStatement extends InsertBaseStatement implements ISchem
     return super.toRelationalStatement(context);
   }
 
-  public ColumnCategory[] getColumnCategories() {
-    return columnCategories;
-  }
-
-  public void setColumnCategories(
-      ColumnCategory[] columnCategories) {
-    this.columnCategories = columnCategories;
-    idColumnIndices = new ArrayList<>();
-    for (int i = 0; i < columnCategories.length; i++) {
-      if (columnCategories[i].equals(ColumnCategory.ID)) {
-        idColumnIndices.add(i);
-      }
-    }
-  }
-
-  public List<Integer> getIdColumnIndices() {
-    return idColumnIndices;
-  }
-
   public IDeviceID getTableDeviceID(int rowIdx) {
     if (deviceIDs == null) {
       deviceIDs = new IDeviceID[rowCount];
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/column/TsTableColumnCategory.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/column/TsTableColumnCategory.java
index b7d6ca02dae..ca4faedffe1 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/column/TsTableColumnCategory.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/column/TsTableColumnCategory.java
@@ -60,7 +60,7 @@ public enum TsTableColumnCategory {
     return deserialize(category);
   }
 
-  private static TsTableColumnCategory deserialize(byte category) {
+  public static TsTableColumnCategory deserialize(byte category) {
     switch (category) {
       case 0:
         return ID;