in java/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java [145:206]
public int write(long time, List<DataPoint> data) throws WriteProcessException, IOException {
checkIsHistoryData(time);
List<ValueChunkWriter> emptyValueChunkWriters = new ArrayList<>();
Set<String> existingMeasurements =
data.stream()
.map(
dataPoint ->
convertColumnNameToLowerCase
? dataPoint.getMeasurementId().toLowerCase()
: dataPoint.getMeasurementId())
.collect(Collectors.toSet());
for (Map.Entry<String, ValueChunkWriter> entry : valueChunkWriterMap.entrySet()) {
if (!existingMeasurements.contains(entry.getKey())) {
emptyValueChunkWriters.add(entry.getValue());
}
}
for (DataPoint point : data) {
boolean isNull = point.getValue() == null;
String measurementId =
convertColumnNameToLowerCase
? point.getMeasurementId().toLowerCase()
: point.getMeasurementId();
ValueChunkWriter valueChunkWriter = valueChunkWriterMap.get(measurementId);
switch (point.getType()) {
case BOOLEAN:
valueChunkWriter.write(time, (boolean) point.getValue(), isNull);
break;
case INT32:
case DATE:
valueChunkWriter.write(time, isNull ? 0 : (int) point.getValue(), isNull);
break;
case INT64:
case TIMESTAMP:
valueChunkWriter.write(time, (long) point.getValue(), isNull);
break;
case FLOAT:
valueChunkWriter.write(time, (float) point.getValue(), isNull);
break;
case DOUBLE:
valueChunkWriter.write(time, (double) point.getValue(), isNull);
break;
case TEXT:
case BLOB:
case STRING:
valueChunkWriter.write(time, (Binary) point.getValue(), isNull);
break;
default:
throw new UnSupportedDataTypeException(
String.format("Data type %s is not supported.", point.getType()));
}
}
if (!emptyValueChunkWriters.isEmpty()) {
writeEmptyDataInOneRow(emptyValueChunkWriters);
}
timeChunkWriter.write(time);
lastTime = time;
isInitLastTime = true;
if (checkPageSizeAndMayOpenANewPage()) {
writePageToPageBuffer();
}
return 1;
}