Skip to content

Commit 82624e2

Browse files
Load: auto detect TsFile's model (tree/table) (#14751)
1 parent 69a4eb2 commit 82624e2

File tree

16 files changed

+501
-636
lines changed

16 files changed

+501
-636
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,6 +1165,7 @@ public class IoTDBConfig {
11651165
/** Load related */
11661166
private double maxAllocateMemoryRatioForLoad = 0.8;
11671167

1168+
private int loadTsFileAnalyzeSchemaBatchReadTimeSeriesMetadataCount = 4096;
11681169
private int loadTsFileAnalyzeSchemaBatchFlushTimeSeriesNumber = 4096;
11691170
private int loadTsFileAnalyzeSchemaBatchFlushTableDeviceNumber = 4096; // For table model
11701171
private long loadTsFileAnalyzeSchemaMemorySizeInBytes =
@@ -4065,6 +4066,16 @@ public void setMaxAllocateMemoryRatioForLoad(double maxAllocateMemoryRatioForLoa
40654066
this.maxAllocateMemoryRatioForLoad = maxAllocateMemoryRatioForLoad;
40664067
}
40674068

4069+
public int getLoadTsFileAnalyzeSchemaBatchReadTimeSeriesMetadataCount() {
4070+
return loadTsFileAnalyzeSchemaBatchReadTimeSeriesMetadataCount;
4071+
}
4072+
4073+
public void setLoadTsFileAnalyzeSchemaBatchReadTimeSeriesMetadataCount(
4074+
int loadTsFileAnalyzeSchemaBatchReadTimeSeriesMetadataCount) {
4075+
this.loadTsFileAnalyzeSchemaBatchReadTimeSeriesMetadataCount =
4076+
loadTsFileAnalyzeSchemaBatchReadTimeSeriesMetadataCount;
4077+
}
4078+
40684079
public int getLoadTsFileAnalyzeSchemaBatchFlushTimeSeriesNumber() {
40694080
return loadTsFileAnalyzeSchemaBatchFlushTimeSeriesNumber;
40704081
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2410,6 +2410,12 @@ private void loadLoadTsFileProps(TrimProperties properties) {
24102410
properties.getProperty(
24112411
"max_allocate_memory_ratio_for_load",
24122412
String.valueOf(conf.getMaxAllocateMemoryRatioForLoad()))));
2413+
conf.setLoadTsFileAnalyzeSchemaBatchReadTimeSeriesMetadataCount(
2414+
Integer.parseInt(
2415+
properties.getProperty(
2416+
"load_tsfile_analyze_schema_batch_read_time_series_metadata_count",
2417+
String.valueOf(
2418+
conf.getLoadTsFileAnalyzeSchemaBatchReadTimeSeriesMetadataCount()))));
24132419
conf.setLoadTsFileAnalyzeSchemaBatchFlushTimeSeriesNumber(
24142420
Integer.parseInt(
24152421
properties.getProperty(

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@
9393
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
9494
import org.apache.iotdb.db.queryengine.plan.statement.crud.LoadTsFileStatement;
9595
import org.apache.iotdb.db.queryengine.plan.statement.pipe.PipeEnrichedStatement;
96-
import org.apache.iotdb.db.storageengine.load.config.LoadTsFileConfigurator;
9796
import org.apache.iotdb.db.storageengine.rescon.disk.FolderManager;
9897
import org.apache.iotdb.db.storageengine.rescon.disk.strategy.DirectoryStrategyType;
9998
import org.apache.iotdb.db.tools.schema.SRStatementGenerator;
@@ -596,11 +595,6 @@ private TSStatus loadTsFileSync(final String dataBaseName, final String fileAbso
596595
statement.setConvertOnTypeMismatch(true);
597596
statement.setVerifySchema(validateTsFile.get());
598597
statement.setAutoCreateDatabase(false);
599-
600-
statement.setModel(
601-
dataBaseName != null
602-
? LoadTsFileConfigurator.MODEL_TABLE_VALUE
603-
: LoadTsFileConfigurator.MODEL_TREE_VALUE);
604598
statement.setDatabase(dataBaseName);
605599

606600
return executeStatementAndClassifyExceptions(statement);
@@ -848,9 +842,7 @@ private TSStatus executeStatementWithPermissionCheckAndRetryOnDataTypeMismatch(
848842
final boolean isTableModelStatement;
849843
final String databaseName;
850844
if (statement instanceof LoadTsFileStatement
851-
&& ((LoadTsFileStatement) statement)
852-
.getModel()
853-
.equals(LoadTsFileConfigurator.MODEL_TABLE_VALUE)) {
845+
&& ((LoadTsFileStatement) statement).getDatabase() != null) {
854846
isTableModelStatement = true;
855847
databaseName = ((LoadTsFileStatement) statement).getDatabase();
856848
} else if (statement instanceof InsertBaseStatement

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,18 @@ public SessionInfo getSessionInfo(IClientSession session) {
385385
session.getSqlDialect());
386386
}
387387

388+
// Sometimes we need to switch from table model to tree model,
389+
// e.g., when loading a tree model TsFile under table model dialect.
390+
public SessionInfo copySessionInfoForTreeModel(final SessionInfo sessionInfo) {
391+
return new SessionInfo(
392+
sessionInfo.getSessionId(),
393+
sessionInfo.getUserName(),
394+
ZoneId.systemDefault(),
395+
sessionInfo.getVersion(),
396+
sessionInfo.getDatabaseName().orElse(null),
397+
IClientSession.SqlDialect.TREE);
398+
}
399+
388400
public SessionInfo getSessionInfoOfTableModel(IClientSession session) {
389401
return new SessionInfo(
390402
session.getId(),

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,6 @@
6565
import org.apache.iotdb.db.queryengine.execution.operator.window.ainode.TailInferenceWindow;
6666
import org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet;
6767
import org.apache.iotdb.db.queryengine.plan.analyze.load.LoadTsFileAnalyzer;
68-
import org.apache.iotdb.db.queryengine.plan.analyze.load.LoadTsFileToTableModelAnalyzer;
69-
import org.apache.iotdb.db.queryengine.plan.analyze.load.LoadTsFileToTreeModelAnalyzer;
7068
import org.apache.iotdb.db.queryengine.plan.analyze.lock.DataNodeSchemaLockManager;
7169
import org.apache.iotdb.db.queryengine.plan.analyze.lock.SchemaLockType;
7270
import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaFetcher;
@@ -79,7 +77,6 @@
7977
import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
8078
import org.apache.iotdb.db.queryengine.plan.expression.multi.FunctionExpression;
8179
import org.apache.iotdb.db.queryengine.plan.expression.visitor.ExistUnknownTypeInExpression;
82-
import org.apache.iotdb.db.queryengine.plan.planner.LocalExecutionPlanner;
8380
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.MeasurementGroup;
8481
import org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.DeviceViewIntoPathDescriptor;
8582
import org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.FillDescriptor;
@@ -154,7 +151,6 @@
154151
import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowQueriesStatement;
155152
import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowVersionStatement;
156153
import org.apache.iotdb.db.schemaengine.template.Template;
157-
import org.apache.iotdb.db.storageengine.load.config.LoadTsFileConfigurator;
158154
import org.apache.iotdb.db.storageengine.load.metrics.LoadTsFileCostMetricsSet;
159155
import org.apache.iotdb.db.utils.constant.SqlConstant;
160156
import org.apache.iotdb.rpc.RpcUtils;
@@ -3005,7 +3001,9 @@ public Analysis visitLoadFile(LoadTsFileStatement loadTsFileStatement, MPPQueryC
30053001
context.setQueryType(QueryType.WRITE);
30063002

30073003
final long startTime = System.nanoTime();
3008-
try (final LoadTsFileAnalyzer loadTsFileAnalyzer = getAnalyzer(loadTsFileStatement, context)) {
3004+
try (final LoadTsFileAnalyzer loadTsFileAnalyzer =
3005+
new LoadTsFileAnalyzer(
3006+
loadTsFileStatement, loadTsFileStatement.isGeneratedByPipe(), context)) {
30093007
return (Analysis) loadTsFileAnalyzer.analyzeFileByFile(new Analysis());
30103008
} catch (final Exception e) {
30113009
final String exceptionMessage =
@@ -3024,27 +3022,6 @@ public Analysis visitLoadFile(LoadTsFileStatement loadTsFileStatement, MPPQueryC
30243022
}
30253023
}
30263024

3027-
private LoadTsFileAnalyzer getAnalyzer(
3028-
LoadTsFileStatement loadTsFileStatement, MPPQueryContext context) {
3029-
if (Objects.equals(loadTsFileStatement.getModel(), LoadTsFileConfigurator.MODEL_TREE_VALUE)) {
3030-
// Load to tree-model
3031-
return new LoadTsFileToTreeModelAnalyzer(
3032-
loadTsFileStatement, loadTsFileStatement.isGeneratedByPipe(), context);
3033-
} else {
3034-
// Load to table-model
3035-
if (Objects.nonNull(loadTsFileStatement.getDatabase())) {
3036-
return new LoadTsFileToTableModelAnalyzer(
3037-
loadTsFileStatement,
3038-
loadTsFileStatement.isGeneratedByPipe(),
3039-
LocalExecutionPlanner.getInstance().metadata,
3040-
context);
3041-
} else {
3042-
throw new SemanticException(
3043-
"Database name must be specified when loading data into the table model.");
3044-
}
3045-
}
3046-
}
3047-
30483025
private boolean analyzeTimeseriesRegionScan(
30493026
WhereCondition timeCondition,
30503027
PathPatternTree patternTree,

0 commit comments

Comments
 (0)