in java/tsfile/src/main/java/org/apache/tsfile/utils/TsFileSketchTool.java [312:450]
private void printChunk(List<ChunkGroupMetadata> allChunkGroupMetadata) {
try {
long nextChunkGroupHeaderPos =
(long) TSFileConfig.MAGIC_STRING.getBytes().length + Byte.BYTES;
// ChunkGroup begins
for (ChunkGroupMetadata chunkGroupMetadata : allChunkGroupMetadata) {
printlnBoth(
pw,
splitStr
+ " [ChunkGroup] of "
+ chunkGroupMetadata.getDevice()
+ ", num of Chunks:"
+ chunkGroupMetadata.getChunkMetadataList().size());
// chunkGroupHeader begins
long offset = nextChunkGroupHeaderPos;
printlnBoth(pw, String.format("%20s", offset) + "|\t[ChunkGroup Header]");
ChunkGroupHeader chunkGroupHeader =
reader.readChunkGroupHeader(nextChunkGroupHeaderPos, false);
printlnBoth(pw, String.format("%20s", offset) + "|\t\t[marker] 0");
printlnBoth(
pw,
String.format("%20s", offset + 1)
+ "|\t\t[deviceID] "
+ chunkGroupHeader.getDeviceID()
+ " size="
+ chunkGroupHeader.getDeviceID().serializedSize());
// chunk begins
for (ChunkMetadata chunkMetadata : chunkGroupMetadata.getChunkMetadataList()) {
offset = chunkMetadata.getOffsetOfChunkHeader();
Chunk chunk = reader.readMemChunk(chunkMetadata);
printlnBoth(
pw,
String.format("%20d", offset)
+ "|\t[Chunk] of "
+ new Path(
chunkGroupHeader.getDeviceID(), chunkMetadata.getMeasurementUid(), false)
+ ", "
+ chunkMetadata.getStatistics());
printlnBoth(
pw,
String.format("%20s", offset)
+ "|\t\t[Chunk Header] "
+ "marker="
+ chunk.getHeader().getChunkType()
+ ", measurementID="
+ chunk.getHeader().getMeasurementID()
+ ", dataSize="
+ chunk.getHeader().getDataSize()
+ ", dataType="
+ chunk.getHeader().getDataType()
+ ", compressionType="
+ chunk.getHeader().getCompressionType()
+ ", encodingType="
+ chunk.getHeader().getEncodingType()
+ ", size="
+ chunk.getHeader().getSerializedSize());
offset += chunk.getHeader().getSerializedSize();
PageHeader pageHeader;
if (((byte) (chunk.getHeader().getChunkType() & 0x3F))
== MetaMarker.ONLY_ONE_PAGE_CHUNK_HEADER) {
pageHeader = PageHeader.deserializeFrom(chunk.getData(), chunkMetadata.getStatistics());
printlnBoth(
pw,
String.format("%20s", offset)
+ "|\t\t\t[Page Header] "
+ " HeaderSize:"
+ (pageHeader.getSerializedSize()
- pageHeader.getStatistics().getSerializedSize())
+ ", UncompressedSize:"
+ pageHeader.getUncompressedSize()
+ ", CompressedSize:"
+ pageHeader.getCompressedSize());
offset +=
pageHeader.getSerializedSize() - pageHeader.getStatistics().getSerializedSize();
printlnBoth(
pw,
String.format("%20s", offset)
+ "|\t\t\t[Page Data] "
+ " Size:"
+ pageHeader.getCompressedSize());
} else { // more than one page in this chunk
ByteBuffer chunkDataBuffer = chunk.getData();
int pageID = 0;
while (chunkDataBuffer.remaining() > 0) {
pageID++;
// deserialize a PageHeader from chunkDataBuffer
pageHeader =
PageHeader.deserializeFrom(chunkDataBuffer, chunk.getHeader().getDataType());
// skip the compressed bytes
chunkDataBuffer.position(chunkDataBuffer.position() + pageHeader.getCompressedSize());
// print page info
printlnBoth(
pw,
String.format("%20s", offset)
+ String.format("|\t\t\t[PageHeader-%s] ", pageID)
+ " HeaderSize:"
+ pageHeader.getSerializedSize()
+ ", UncompressedSize:"
+ pageHeader.getUncompressedSize()
+ ", CompressedSize:"
+ pageHeader.getCompressedSize()
+ ", "
+ pageHeader.getStatistics());
offset += pageHeader.getSerializedSize();
printlnBoth(
pw,
String.format("%20s", offset)
+ String.format("|\t\t\t[Page-%s] ", pageID)
+ ", CompressedSize:"
+ pageHeader.getCompressedSize()
+ ", "
+ pageHeader.getStatistics());
offset += pageHeader.getCompressedSize();
}
}
nextChunkGroupHeaderPos =
chunkMetadata.getOffsetOfChunkHeader()
+ chunk.getHeader().getSerializedSize()
+ chunk.getHeader().getDataSize();
}
reader.position(nextChunkGroupHeaderPos);
byte marker = reader.readMarker();
switch (marker) {
case MetaMarker.CHUNK_GROUP_HEADER:
// do nothing
break;
case MetaMarker.OPERATION_INDEX_RANGE:
// skip the PlanIndex
nextChunkGroupHeaderPos += 16;
break;
}
printlnBoth(pw, splitStr + " [ChunkGroup] of " + chunkGroupMetadata.getDevice() + " ends");
}
} catch (IOException e) {
e.printStackTrace();
}
}