Skip to content

Commit 08f221a

Browse files
Load: create DB in lower-case & truncate null suffix of device ID (#13966)
1 parent f9b09be commit 08f221a

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@ private boolean shouldFlushDevices() {
166166
public void flush() {
167167
doAutoCreateAndVerify();
168168
clearDevices();
169-
clearIdColumnMapper();
170169
}
171170

172171
private void doAutoCreateAndVerify() throws SemanticException {
@@ -224,9 +223,12 @@ public List<Object[]> getDeviceIdList() {
224223
idColumnCountAndMapper.getRight().entrySet()) {
225224
final int fileColumnIndex = fileColumn2RealColumn.getKey();
226225
final int realColumnIndex = fileColumn2RealColumn.getValue();
227-
deviceIdArray[realColumnIndex] = device.getSegments()[fileColumnIndex + 1];
226+
deviceIdArray[realColumnIndex] =
227+
fileColumnIndex + 1 < device.getSegments().length
228+
? device.getSegments()[fileColumnIndex + 1]
229+
: null;
228230
}
229-
devices.add(deviceIdArray);
231+
devices.add(truncateNullSuffixesOfDeviceIdSegments(deviceIdArray));
230232
}
231233
return devices;
232234
}
@@ -243,6 +245,14 @@ public List<Object[]> getAttributeValueList() {
243245
};
244246
}
245247

248+
private static Object[] truncateNullSuffixesOfDeviceIdSegments(Object[] segments) {
249+
int lastNonNullIndex = segments.length - 1;
250+
while (lastNonNullIndex >= 1 && segments[lastNonNullIndex] == null) {
251+
lastNonNullIndex--;
252+
}
253+
return Arrays.copyOf(segments, lastNonNullIndex + 1);
254+
}
255+
246256
public void createTable(TableSchema fileSchema, MPPQueryContext context, Metadata metadata)
247257
throws VerifyMetadataException {
248258
final TableSchema realSchema =
@@ -366,7 +376,7 @@ private void clearModificationsAndTimeIndex() {
366376
currentTimeIndexMemoryUsageSizeInBytes = 0;
367377
}
368378

369-
private void clearIdColumnMapper() {
379+
public void clearIdColumnMapper() {
370380
tableIdColumnMapper.clear();
371381
block.reduceMemoryUsage(tableIdColumnMapperMemoryUsageSizeInBytes);
372382
tableIdColumnMapperMemoryUsageSizeInBytes = 0;

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ protected void analyzeSingleTsFile(final File tsFile)
171171
addWritePointCount(writePointCount);
172172

173173
schemaCache.flush();
174+
schemaCache.clearIdColumnMapper();
174175
} catch (final LoadEmptyFileException loadEmptyFileException) {
175176
LOGGER.warn("Failed to load empty file: {}", tsFile.getAbsolutePath());
176177
if (isDeleteAfterLoad) {
@@ -186,7 +187,8 @@ private void autoCreateDatabaseIfAbsent(final String database) throws VerifyMeta
186187
}
187188

188189
final CreateDBTask task =
189-
new CreateDBTask(new TDatabaseSchema(ROOT + PATH_SEPARATOR_CHAR + database), true);
190+
new CreateDBTask(
191+
new TDatabaseSchema(ROOT + PATH_SEPARATOR_CHAR + database).setIsTableModel(true), true);
190192
try {
191193
final ListenableFuture<ConfigTaskResult> future =
192194
task.execute(ClusterConfigTaskExecutor.getInstance());

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/config/LoadTsFileConfigurator.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@
2929
import java.util.Arrays;
3030
import java.util.Collections;
3131
import java.util.HashSet;
32+
import java.util.Locale;
3233
import java.util.Map;
34+
import java.util.Objects;
3335
import java.util.Set;
3436

3537
public class LoadTsFileConfigurator {
@@ -83,7 +85,8 @@ public static int parseOrGetDefaultDatabaseLevel(final Map<String, String> loadA
8385
public static final String DATABASE_NAME_KEY = "database-name";
8486

8587
public static @Nullable String parseDatabaseName(final Map<String, String> loadAttributes) {
86-
return loadAttributes.get(DATABASE_NAME_KEY);
88+
final String databaseName = loadAttributes.get(DATABASE_NAME_KEY);
89+
return Objects.nonNull(databaseName) ? databaseName.toLowerCase(Locale.ENGLISH) : null;
8790
}
8891

8992
public static final String ON_SUCCESS_KEY = "on-success";

0 commit comments

Comments
 (0)