in tsfile-viewer-web/src/main/java/org/apache/iotdb/ui/service/TsfileViewerService.java [265:372]
public List<ChunkOffsetInfo> getChunkOffsetList(
Long offset, String filePath, OffsetType offsetType, QueryByTimeseriesIndexReq req)
throws IOException, InterruptedException, TsfileViewerException {
filePath = getFullPath(filePath);
TsFileAnalyserV13 parse = tsfileViewerContainer.getTsfileParser(filePath);
List<ChunkOffsetInfo> chunkOffsetInfoList = new ArrayList<>();
AtomicInteger no = new AtomicInteger(1);
switch (offsetType) {
case CG:
chunkOffsetInfoList = parse.fetchChunkOffsetListByChunkGroupOffset(offset);
if (chunkOffsetInfoList.get(0).isAligned()) {
chunkOffsetInfoList = chunkOffsetInfoList.subList(0, 1);
}
chunkOffsetInfoList =
chunkOffsetInfoList.stream()
.map(
chunkOffsetInfo -> {
if (chunkOffsetInfo.isAligned()) {
chunkOffsetInfo.setMeasurementId(
no + ". " + "AlignedChunk[" + chunkOffsetInfo.getOffset() + "]");
} else {
chunkOffsetInfo.setMeasurementId(
no
+ ". "
+ chunkOffsetInfo.getMeasurementId()
+ "["
+ chunkOffsetInfo.getOffset()
+ "]");
}
no.incrementAndGet();
return chunkOffsetInfo;
})
.collect(Collectors.toList());
break;
case TS_INDEX:
Map<Long, Pair<Path, ITimeSeriesMetadata>> timeseriesMetadataMap =
parse.getTimeseriesMetadataMap();
Pair<Path, ITimeSeriesMetadata> pair = timeseriesMetadataMap.get(offset);
if (pair.right instanceof AlignedTimeSeriesMetadata) {
AlignedTimeSeriesMetadata timeSeriesMetadata = (AlignedTimeSeriesMetadata) pair.right;
chunkOffsetInfoList =
timeSeriesMetadata.getChunkMetadataList().stream()
.map(
alignedChunkMetadata -> {
ChunkOffsetInfo chunkOffsetInfo = new ChunkOffsetInfo();
chunkOffsetInfo.setMeasurementId(
"AlignedChunk[" + alignedChunkMetadata.getOffsetOfChunkHeader() + "]");
chunkOffsetInfo.setOffset(alignedChunkMetadata.getOffsetOfChunkHeader());
chunkOffsetInfo.setAligned(true);
chunkOffsetInfo.setStartTime(
alignedChunkMetadata.getStatistics().getStartTime());
chunkOffsetInfo.setEndTime(
alignedChunkMetadata.getStatistics().getEndTime());
return chunkOffsetInfo;
})
.collect(Collectors.toList());
} else {
TimeseriesMetadata timeSeriesMetadata = (TimeseriesMetadata) pair.right;
chunkOffsetInfoList =
timeSeriesMetadata.getChunkMetadataList().stream()
.map(
iChunkMetadata -> {
ChunkOffsetInfo chunkOffsetInfo = new ChunkOffsetInfo();
chunkOffsetInfo.setMeasurementId(
iChunkMetadata.getMeasurementUid()
+ "["
+ iChunkMetadata.getOffsetOfChunkHeader()
+ "]");
chunkOffsetInfo.setOffset(iChunkMetadata.getOffsetOfChunkHeader());
chunkOffsetInfo.setAligned(false);
chunkOffsetInfo.setStartTime(iChunkMetadata.getStatistics().getStartTime());
chunkOffsetInfo.setEndTime(iChunkMetadata.getStatistics().getEndTime());
return chunkOffsetInfo;
})
.collect(Collectors.toList());
}
// 添加过滤条件
chunkOffsetInfoList =
chunkOffsetInfoList.stream()
.filter(
chunkOffsetInfo -> {
if (req.getBeginDate() != null && req.getBeginDate() != 0) {
if (req.getBeginDate() > chunkOffsetInfo.getEndTime()) {
return false;
}
}
if (req.getEndDate() != null && req.getEndDate() != 0) {
if (req.getEndDate() < chunkOffsetInfo.getStartTime()) {
return false;
}
}
return true;
})
.map(
(chunkOffsetInfo) -> {
chunkOffsetInfo.setMeasurementId(
no + ". " + chunkOffsetInfo.getMeasurementId());
no.incrementAndGet();
return chunkOffsetInfo;
})
.collect(Collectors.toList());
break;
default:
throw new TsfileViewerException(TsfileViewerException.UNSUPPORTED_OFFSETTYPE, "");
}
return chunkOffsetInfoList;
}