You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2022/10/11 06:42:09 UTC
[iotdb] branch master updated: [IOTDB-4571] Add doc in IPartitionFetcher and fix incorrect use. (#7519)
This is an automated email from the ASF dual-hosted git repository.
qiaojialin 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 8e22f87805 [IOTDB-4571] Add doc in IPartitionFetcher and fix incorrect use. (#7519)
8e22f87805 is described below
commit 8e22f878050e35d25e0fce2fca9ec4d60faadbd3
Author: ZhangHongYin <46...@users.noreply.github.com>
AuthorDate: Tue Oct 11 14:42:02 2022 +0800
[IOTDB-4571] Add doc in IPartitionFetcher and fix incorrect use. (#7519)
---
.../iotdb/commons/partition/DataPartition.java | 21 ++++---
.../resources/conf/iotdb-datanode.properties | 2 +
.../apache/iotdb/db/mpp/plan/analyze/Analysis.java | 16 +++++
.../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java | 70 ++++++++--------------
.../mpp/plan/analyze/ClusterPartitionFetcher.java | 33 ----------
.../mpp/plan/analyze/FakePartitionFetcherImpl.java | 5 --
.../db/mpp/plan/analyze/IPartitionFetcher.java | 42 ++++++++++---
.../plan/analyze/StandalonePartitionFetcher.java | 5 --
.../db/mpp/plan/analyze/cache/PartitionCache.java | 2 +-
.../db/mpp/plan/execution/QueryExecution.java | 30 +++++++---
.../plan/statement/crud/LoadTsFileStatement.java | 2 +
11 files changed, 110 insertions(+), 118 deletions(-)
diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/partition/DataPartition.java b/node-commons/src/main/java/org/apache/iotdb/commons/partition/DataPartition.java
index ae9c37942e..4164fc716b 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/partition/DataPartition.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/partition/DataPartition.java
@@ -112,19 +112,18 @@ public class DataPartition extends Partition {
// TODO return the latest dataRegionReplicaSet for each time partition
String storageGroup = getStorageGroupByDevice(deviceName);
TSeriesPartitionSlot seriesPartitionSlot = calculateDeviceGroupId(deviceName);
- try {
- List<TRegionReplicaSet> regions =
- dataPartitionMap.get(storageGroup).get(seriesPartitionSlot).entrySet().stream()
- .filter(entry -> entry.getKey().equals(timePartitionSlot))
- .flatMap(entry -> entry.getValue().stream())
- .collect(Collectors.toList());
- // IMPORTANT TODO: (xingtanzjr) need to handle the situation for write operation that there
- // are more than 1 Regions for one timeSlot
- return regions.get(0);
- } catch (NullPointerException exception) {
+ if (!dataPartitionMap.containsKey(storageGroup)) {
throw new RuntimeException(
- "Failed to auto create storage group because enable_auto_create_schema is FALSE.");
+ "Storage group not exists and failed to create automatically because enable_auto_create_schema is FALSE.");
}
+ List<TRegionReplicaSet> regions =
+ dataPartitionMap.get(storageGroup).get(seriesPartitionSlot).entrySet().stream()
+ .filter(entry -> entry.getKey().equals(timePartitionSlot))
+ .flatMap(entry -> entry.getValue().stream())
+ .collect(Collectors.toList());
+ // IMPORTANT TODO: (xingtanzjr) need to handle the situation for write operation that there
+ // are more than 1 Regions for one timeSlot
+ return regions.get(0);
}
private String getStorageGroupByDevice(String deviceName) {
diff --git a/server/src/assembly/resources/conf/iotdb-datanode.properties b/server/src/assembly/resources/conf/iotdb-datanode.properties
index 43eee16851..06a40a8757 100644
--- a/server/src/assembly/resources/conf/iotdb-datanode.properties
+++ b/server/src/assembly/resources/conf/iotdb-datanode.properties
@@ -748,6 +748,8 @@ timestamp_precision=ms
####################
# Whether creating schema automatically is enabled
+# If true, then create storage group and timeseries automatically when not exists in insertion
+# Or else, user need to create storage group and timeseries before insertion.
# Datatype: boolean
# enable_auto_create_schema=true
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java
index 757bfa42fb..e3c70fbbf2 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java
@@ -68,6 +68,10 @@ public class Analysis {
private boolean finishQueryAfterAnalyze;
+ // potential fail message when finishQueryAfterAnalyze is true. If failMessage is NULL, means no
+ // fail.
+ private String failMessage;
+
/////////////////////////////////////////////////////////////////////////////////////////////////
// Query Analysis (used in ALIGN BY TIME)
/////////////////////////////////////////////////////////////////////////////////////////////////
@@ -286,6 +290,18 @@ public class Analysis {
this.finishQueryAfterAnalyze = finishQueryAfterAnalyze;
}
+ public boolean isFailed() {
+ return failMessage != null;
+ }
+
+ public String getFailMessage() {
+ return failMessage;
+ }
+
+ public void setFailMessage(String failMessage) {
+ this.failMessage = failMessage;
+ }
+
public void setDeviceViewInputIndexesMap(Map<String, List<Integer>> deviceViewInputIndexesMap) {
this.deviceViewInputIndexesMap = deviceViewInputIndexesMap;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
index b973187067..25fa7a2538 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
@@ -29,6 +29,7 @@ import org.apache.iotdb.commons.partition.SchemaPartition;
import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
+import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus;
@@ -150,6 +151,7 @@ import static org.apache.iotdb.db.mpp.common.header.ColumnHeaderConstant.COLUMN_
public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> {
private static final Logger logger = LoggerFactory.getLogger(Analyzer.class);
+ private static final IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
private final IPartitionFetcher partitionFetcher;
private final ISchemaFetcher schemaFetcher;
@@ -1232,15 +1234,8 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
dataPartitionQueryParam.setDevicePath(insertTabletStatement.getDevicePath().getFullPath());
dataPartitionQueryParam.setTimePartitionSlotList(insertTabletStatement.getTimePartitionSlots());
- DataPartition dataPartition =
- partitionFetcher.getOrCreateDataPartition(
- Collections.singletonList(dataPartitionQueryParam));
-
- Analysis analysis = new Analysis();
- analysis.setStatement(insertTabletStatement);
- analysis.setDataPartitionInfo(dataPartition);
-
- return analysis;
+ return getAnalysisForWriting(
+ insertTabletStatement, Collections.singletonList(dataPartitionQueryParam));
}
@Override
@@ -1251,15 +1246,8 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
dataPartitionQueryParam.setDevicePath(insertRowStatement.getDevicePath().getFullPath());
dataPartitionQueryParam.setTimePartitionSlotList(insertRowStatement.getTimePartitionSlots());
- DataPartition dataPartition =
- partitionFetcher.getOrCreateDataPartition(
- Collections.singletonList(dataPartitionQueryParam));
-
- Analysis analysis = new Analysis();
- analysis.setStatement(insertRowStatement);
- analysis.setDataPartitionInfo(dataPartition);
-
- return analysis;
+ return getAnalysisForWriting(
+ insertRowStatement, Collections.singletonList(dataPartitionQueryParam));
}
@Override
@@ -1283,14 +1271,7 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
dataPartitionQueryParams.add(dataPartitionQueryParam);
}
- DataPartition dataPartition =
- partitionFetcher.getOrCreateDataPartition(dataPartitionQueryParams);
-
- Analysis analysis = new Analysis();
- analysis.setStatement(insertRowsStatement);
- analysis.setDataPartitionInfo(dataPartition);
-
- return analysis;
+ return getAnalysisForWriting(insertRowsStatement, dataPartitionQueryParams);
}
@Override
@@ -1315,14 +1296,7 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
dataPartitionQueryParams.add(dataPartitionQueryParam);
}
- DataPartition dataPartition =
- partitionFetcher.getOrCreateDataPartition(dataPartitionQueryParams);
-
- Analysis analysis = new Analysis();
- analysis.setStatement(insertMultiTabletsStatement);
- analysis.setDataPartitionInfo(dataPartition);
-
- return analysis;
+ return getAnalysisForWriting(insertMultiTabletsStatement, dataPartitionQueryParams);
}
@Override
@@ -1336,15 +1310,8 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
dataPartitionQueryParam.setTimePartitionSlotList(
insertRowsOfOneDeviceStatement.getTimePartitionSlots());
- DataPartition dataPartition =
- partitionFetcher.getOrCreateDataPartition(
- Collections.singletonList(dataPartitionQueryParam));
-
- Analysis analysis = new Analysis();
- analysis.setStatement(insertRowsOfOneDeviceStatement);
- analysis.setDataPartitionInfo(dataPartition);
-
- return analysis;
+ return getAnalysisForWriting(
+ insertRowsOfOneDeviceStatement, Collections.singletonList(dataPartitionQueryParam));
}
@Override
@@ -1417,12 +1384,23 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
params.add(dataPartitionQueryParam);
}
- DataPartition dataPartition = partitionFetcher.getOrCreateDataPartition(params);
+ return getAnalysisForWriting(loadTsFileStatement, params);
+ }
+ /** get analysis according to statement and params */
+ private Analysis getAnalysisForWriting(
+ Statement statement, List<DataPartitionQueryParam> dataPartitionQueryParams) {
Analysis analysis = new Analysis();
- analysis.setStatement(loadTsFileStatement);
- analysis.setDataPartitionInfo(dataPartition);
+ analysis.setStatement(statement);
+ DataPartition dataPartition =
+ partitionFetcher.getOrCreateDataPartition(dataPartitionQueryParams);
+ if (dataPartition.isEmpty()) {
+ analysis.setFinishQueryAfterAnalyze(true);
+ analysis.setFailMessage(
+ "Storage group not exists and failed to create automatically because enable_auto_create_schema is FALSE.");
+ }
+ analysis.setDataPartitionInfo(dataPartition);
return analysis;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
index c91fa1de6f..383595c5bd 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
@@ -170,7 +170,6 @@ public class ClusterPartitionFetcher implements IPartitionFetcher {
}
}
- /** get data partition when query */
@Override
public DataPartition getDataPartition(
Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap) {
@@ -197,37 +196,6 @@ public class ClusterPartitionFetcher implements IPartitionFetcher {
}
}
- /** get data partition when write */
- @Override
- public DataPartition getDataPartition(List<DataPartitionQueryParam> dataPartitionQueryParams) {
- try (ConfigNodeClient client =
- configNodeClientManager.borrowClient(ConfigNodeInfo.partitionRegionId)) {
- Map<String, List<DataPartitionQueryParam>> splitDataPartitionQueryParams =
- splitDataPartitionQueryParam(dataPartitionQueryParams, false);
- DataPartition dataPartition = partitionCache.getDataPartition(splitDataPartitionQueryParams);
- if (null == dataPartition) {
- TDataPartitionTableResp dataPartitionTableResp =
- client.getDataPartitionTable(constructDataPartitionReq(splitDataPartitionQueryParams));
-
- if (dataPartitionTableResp.getStatus().getCode()
- == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- dataPartition = parseDataPartitionResp(dataPartitionTableResp);
- partitionCache.updateDataPartitionCache(dataPartitionTableResp.getDataPartitionTable());
- } else {
- throw new RuntimeException(
- new IoTDBException(
- dataPartitionTableResp.getStatus().getMessage(),
- dataPartitionTableResp.getStatus().getCode()));
- }
- }
- return dataPartition;
- } catch (TException | IOException e) {
- throw new StatementAnalyzeException(
- "An error occurred when executing getDataPartition():" + e.getMessage());
- }
- }
-
- /** get data partition when query */
@Override
public DataPartition getOrCreateDataPartition(
Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap) {
@@ -255,7 +223,6 @@ public class ClusterPartitionFetcher implements IPartitionFetcher {
}
}
- /** get data partition when write */
@Override
public DataPartition getOrCreateDataPartition(
List<DataPartitionQueryParam> dataPartitionQueryParams) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/FakePartitionFetcherImpl.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/FakePartitionFetcherImpl.java
index 76012118d5..a799d5ac3b 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/FakePartitionFetcherImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/FakePartitionFetcherImpl.java
@@ -209,11 +209,6 @@ public class FakePartitionFetcherImpl implements IPartitionFetcher {
return dataPartition;
}
- @Override
- public DataPartition getDataPartition(List<DataPartitionQueryParam> dataPartitionQueryParams) {
- return null;
- }
-
@Override
public DataPartition getOrCreateDataPartition(
Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/IPartitionFetcher.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/IPartitionFetcher.java
index a4287bcde0..55017ca382 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/IPartitionFetcher.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/IPartitionFetcher.java
@@ -30,28 +30,52 @@ import java.util.Map;
public interface IPartitionFetcher {
+ /** Get schema partition without automatically create, used in write and query scenarios. */
SchemaPartition getSchemaPartition(PathPatternTree patternTree);
+ /**
+ * Get or create schema partition, used in insertion with enable_auto_create_schema is true. if
+ * schemaPartition does not exist, then automatically create.
+ */
SchemaPartition getOrCreateSchemaPartition(PathPatternTree patternTree);
+ /**
+ * Get data partition, used in query scenarios.
+ *
+ * @param sgNameToQueryParamsMap storage group name -> the list of DataPartitionQueryParams
+ */
+ DataPartition getDataPartition(Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap);
+
+ /**
+ * Get or create data partition, used in standalone write scenarios. if enableAutoCreateSchema is
+ * true and storage group/series/time slots not exists, then automatically create.
+ *
+ * @param sgNameToQueryParamsMap storage group name -> the list of DataPartitionQueryParams
+ */
+ DataPartition getOrCreateDataPartition(
+ Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap);
+
+ /**
+ * Get or create data partition, used in cluster write scenarios. if enableAutoCreateSchema is
+ * true and storage group/series/time slots not exists, then automatically create.
+ *
+ * @param dataPartitionQueryParams the list of DataPartitionQueryParams
+ */
+ DataPartition getOrCreateDataPartition(List<DataPartitionQueryParam> dataPartitionQueryParams);
+
+ /** Get schema partition and matched nodes according to path pattern tree. */
default SchemaNodeManagementPartition getSchemaNodeManagementPartition(
PathPatternTree patternTree) {
return getSchemaNodeManagementPartitionWithLevel(patternTree, null);
}
+ /** Get schema partition and matched nodes according to path pattern tree and node level. */
SchemaNodeManagementPartition getSchemaNodeManagementPartitionWithLevel(
PathPatternTree patternTree, Integer level);
- DataPartition getDataPartition(Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap);
-
- DataPartition getDataPartition(List<DataPartitionQueryParam> dataPartitionQueryParams);
-
- DataPartition getOrCreateDataPartition(
- Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap);
-
- DataPartition getOrCreateDataPartition(List<DataPartitionQueryParam> dataPartitionQueryParams);
-
+ /** Update region cache in partition cache when receive request from config node */
boolean updateRegionCache(TRegionRouteReq req);
+ /** Invalid all partition cache */
void invalidAllCache();
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/StandalonePartitionFetcher.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/StandalonePartitionFetcher.java
index 6f149e1b03..93e99b4ba8 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/StandalonePartitionFetcher.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/StandalonePartitionFetcher.java
@@ -146,11 +146,6 @@ public class StandalonePartitionFetcher implements IPartitionFetcher {
}
}
- @Override
- public DataPartition getDataPartition(List<DataPartitionQueryParam> dataPartitionQueryParams) {
- return null;
- }
-
@Override
public DataPartition getOrCreateDataPartition(
Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/cache/PartitionCache.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/cache/PartitionCache.java
index 5fa061145a..be0e9b6e94 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/cache/PartitionCache.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/cache/PartitionCache.java
@@ -327,7 +327,7 @@ public class PartitionCache {
fetchStorageGroupAndUpdateCache(result, devicePaths);
// second try to hit storage group in fast-fail way
getStorageGroupMap(result, devicePaths, true);
- if (!result.isSuccess() && isAutoCreate && config.isAutoCreateSchemaEnabled()) {
+ if (!result.isSuccess() && isAutoCreate) {
// try to auto create storage group of failed device
createStorageGroupAndUpdateCache(result, devicePaths);
// third try to hit storage group in fast-fail way
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/QueryExecution.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/QueryExecution.java
index 160b702b3c..788403fb58 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/QueryExecution.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/QueryExecution.java
@@ -165,8 +165,12 @@ public class QueryExecution implements IQueryExecution {
public void start() {
if (skipExecute()) {
logger.info("[SkipExecute]");
- constructResultForMemorySource();
- stateMachine.transitionToRunning();
+ if (context.getQueryType() == QueryType.WRITE && analysis.isFailed()) {
+ stateMachine.transitionToFailed(new RuntimeException(analysis.getFailMessage()));
+ } else {
+ constructResultForMemorySource();
+ stateMachine.transitionToRunning();
+ }
return;
}
long remainTime = context.getTimeOut() - (System.currentTimeMillis() - context.getStartTime());
@@ -473,11 +477,20 @@ public class QueryExecution implements IQueryExecution {
@SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning
private ExecutionResult getExecutionResult(QueryState state) {
- TSStatusCode statusCode =
- // For WRITE, the state should be FINISHED; For READ, the state could be RUNNING
- state == QueryState.FINISHED || state == QueryState.RUNNING
- ? TSStatusCode.SUCCESS_STATUS
- : TSStatusCode.QUERY_PROCESS_ERROR;
+ TSStatusCode statusCode;
+ if (context.getQueryType() == QueryType.WRITE && analysis.isFailed()) {
+ // For WRITE, the state should be FINISHED
+ statusCode =
+ state == QueryState.FINISHED
+ ? TSStatusCode.SUCCESS_STATUS
+ : TSStatusCode.WRITE_PROCESS_ERROR;
+ } else {
+ // For READ, the state could be FINISHED and RUNNING
+ statusCode =
+ state == QueryState.FINISHED || state == QueryState.RUNNING
+ ? TSStatusCode.SUCCESS_STATUS
+ : TSStatusCode.QUERY_PROCESS_ERROR;
+ }
TSStatus tsstatus = RpcUtils.getStatus(statusCode, stateMachine.getFailureMessage());
@@ -488,7 +501,8 @@ public class QueryExecution implements IQueryExecution {
}
// collect redirect info to client for writing
- if (analysis.getStatement() instanceof InsertBaseStatement) {
+ if (analysis.getStatement() instanceof InsertBaseStatement
+ && !analysis.isFinishQueryAfterAnalyze()) {
InsertBaseStatement insertStatement = (InsertBaseStatement) analysis.getStatement();
List<TEndPoint> redirectNodeList;
if (config.isClusterMode()) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/LoadTsFileStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/LoadTsFileStatement.java
index b127df23df..efa386c241 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/LoadTsFileStatement.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/LoadTsFileStatement.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.db.mpp.plan.statement.crud;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
+import org.apache.iotdb.db.mpp.plan.constant.StatementType;
import org.apache.iotdb.db.mpp.plan.statement.Statement;
import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor;
import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
@@ -51,6 +52,7 @@ public class LoadTsFileStatement extends Statement {
this.autoCreateSchema = IoTDBDescriptor.getInstance().getConfig().isAutoCreateSchemaEnabled();
this.tsFiles = new ArrayList<>();
this.resources = new ArrayList<>();
+ this.statementType = StatementType.MULTI_BATCH_INSERT;
if (file.isFile()) {
tsFiles.add(file);