in backup-core/src/main/java/org/apache/iotdb/backup/core/service/ExportPipelineService.java [785:838]
public void compressBlock(
List<TimeSeriesRowModel> groupList, OutputStream outputStream, ExportModel exportModel) {
// TODO: time 列表
List<String> timeList = new ArrayList<>();
// measurement 列表
List<List<String>> list =
groupList.stream()
.map(
s -> {
timeList.add(s.getTimestamp());
return s.getIFieldList().stream()
.map(IField::getField)
.collect(Collectors.toList());
})
.collect(
ArrayList::new,
(k, v) -> {
if (k.size() == 0) {
for (int i = 0; i < v.size(); i++) {
k.add(new ArrayList<>());
}
}
for (int i = 0; i < v.size(); i++) {
FieldCopy fieldCopy = v.get(i);
List<String> objectList = k.get(i);
if (fieldCopy == null
|| fieldCopy.getObjectValue(fieldCopy.getDataType()) == null) {
objectList.add(null);
} else {
objectList.add(
String.valueOf(fieldCopy.getObjectValue(fieldCopy.getDataType())));
}
}
},
(k, v) -> {
for (int i = 0; i < k.size(); i++) {
k.get(i).addAll(v.get(i));
}
});
String blockHeader = "block";
try {
outputStream.write(blockHeader.getBytes());
} catch (IOException e) {
log.error("", e);
}
writeCompressData(timeList, outputStream, exportModel);
for (int i = 0; i < list.size(); i++) {
List<String> measurementList = list.get(i);
writeCompressData(measurementList, outputStream, exportModel);
}
}