This is an automated email from the ASF dual-hosted git repository. leirui pushed a commit to branch research/M4-visualization in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 45a63a8139e29173e3fc243a13cbd98e37f26617 Author: Lei Rui <[email protected]> AuthorDate: Sun Jun 11 15:55:53 2023 +0800 improve sketch tool --- .../apache/iotdb/db/tools/TsFileSketchTool.java | 89 ++++++++++++++++++---- 1 file changed, 76 insertions(+), 13 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/tools/TsFileSketchTool.java b/server/src/main/java/org/apache/iotdb/db/tools/TsFileSketchTool.java index c416e5690a0..6cdb37b8ab5 100644 --- a/server/src/main/java/org/apache/iotdb/db/tools/TsFileSketchTool.java +++ b/server/src/main/java/org/apache/iotdb/db/tools/TsFileSketchTool.java @@ -22,6 +22,7 @@ package org.apache.iotdb.db.tools; import org.apache.iotdb.tsfile.common.conf.TSFileConfig; import org.apache.iotdb.tsfile.file.MetaMarker; import org.apache.iotdb.tsfile.file.header.ChunkGroupHeader; +import org.apache.iotdb.tsfile.file.header.PageHeader; import org.apache.iotdb.tsfile.file.metadata.ChunkGroupMetadata; import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata; import org.apache.iotdb.tsfile.file.metadata.MetadataIndexEntry; @@ -37,6 +38,7 @@ import org.apache.iotdb.tsfile.utils.Pair; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -100,26 +102,87 @@ public class TsFileSketchTool { // chunk begins for (ChunkMetadata chunkMetadata : chunkGroupMetadata.getChunkMetadataList()) { Chunk chunk = reader.readMemChunk(chunkMetadata); + // printlnBoth( + // pw, + // String.format("%20d", chunkMetadata.getOffsetOfChunkHeader()) + // + "|\t[Chunk] of " + // + chunkMetadata.getMeasurementUid() + // + ", numOfPoints:" + // + chunkMetadata.getNumOfPoints() + // + ", time range:[" + // + chunkMetadata.getStartTime() + // + "," + // + chunkMetadata.getEndTime() + // + "], tsDataType:" + // + chunkMetadata.getDataType() + // + ", \n" + // + String.format("%20s", "") + // + " \t" + // + chunkMetadata.getStatistics()); + // printlnBoth( + // pw, + // String.format("%20s", "") + "|\t\t[marker] " + + // chunk.getHeader().getChunkType()); printlnBoth( pw, String.format("%20d", chunkMetadata.getOffsetOfChunkHeader()) + "|\t[Chunk] of " - + chunkMetadata.getMeasurementUid() - + ", numOfPoints:" - + chunkMetadata.getNumOfPoints() - + ", time range:[" - + chunkMetadata.getStartTime() - + "," - + chunkMetadata.getEndTime() - + "], tsDataType:" - + chunkMetadata.getDataType() - + ", \n" - + String.format("%20s", "") - + " \t" + + new Path(chunkGroupHeader.getDeviceID(), chunkMetadata.getMeasurementUid()) + + ", " + chunkMetadata.getStatistics()); printlnBoth( pw, - String.format("%20s", "") + "|\t\t[marker] " + chunk.getHeader().getChunkType()); + String.format("%20s", "") + + "|\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()); + 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", "") + + "|\t\t[page] " + + " UncompressedSize:" + + pageHeader.getUncompressedSize() + + ", CompressedSize:" + + 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", "") + + String.format("|\t\t[page-%s] ", pageID) + + " UncompressedSize:" + + pageHeader.getUncompressedSize() + + ", CompressedSize:" + + pageHeader.getCompressedSize() + + ", " + + pageHeader.getStatistics()); + } + } nextChunkGroupHeaderPos = chunkMetadata.getOffsetOfChunkHeader() + chunk.getHeader().getSerializedSize()
