This is an automated email from the ASF dual-hosted git repository.

marklau99 pushed a commit to branch IOTDB-4693
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/IOTDB-4693 by this push:
     new 46d9a32a4a refactor rewrite tool
46d9a32a4a is described below

commit 46d9a32a4ab968fa9f5000c1278913f5d1d62817
Author: Liu Xuxin <[email protected]>
AuthorDate: Thu Oct 20 17:37:12 2022 +0800

    refactor rewrite tool
---
 .../apache/iotdb/tsfile/TsFileSequenceRead.java    |  2 +-
 .../java/org/apache/iotdb/RewriteTsFileTool.java   | 92 ++++++++++++++--------
 2 files changed, 60 insertions(+), 34 deletions(-)

diff --git 
a/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileSequenceRead.java 
b/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileSequenceRead.java
index aa946f67b7..5fedb57270 100644
--- 
a/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileSequenceRead.java
+++ 
b/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileSequenceRead.java
@@ -53,7 +53,7 @@ public class TsFileSequenceRead {
     "squid:S106"
   }) // Suppress high Cognitive Complexity and Standard outputs warning
   public static void main(String[] args) throws IOException {
-    String filename = "test.tsfile";
+    String filename = 
"C:\\Users\\MARKLAU\\Desktop\\1630059742304-637-1-0.tsfile";
     if (args.length >= 1) {
       filename = args[0];
     }
diff --git 
a/rewrite-tsfile-tool/src/main/java/org/apache/iotdb/RewriteTsFileTool.java 
b/rewrite-tsfile-tool/src/main/java/org/apache/iotdb/RewriteTsFileTool.java
index c2cc99d0e9..5476faf963 100644
--- a/rewrite-tsfile-tool/src/main/java/org/apache/iotdb/RewriteTsFileTool.java
+++ b/rewrite-tsfile-tool/src/main/java/org/apache/iotdb/RewriteTsFileTool.java
@@ -134,7 +134,7 @@ public class RewriteTsFileTool {
       password = getArgOrDefault(commandLine, "pw", password);
       filePath = getArgOrDefault(commandLine, "f", filePath);
       readMode = getArgOrDefault(commandLine, "rm", readMode);
-      ignoreBrokenChunk = commandLine.hasOption("ignore-broken");
+      ignoreBrokenChunk = commandLine.hasOption("ig");
     } catch (ParseException e) {
       System.out.printf("Parse Args Error. %s%n", e.getMessage());
       priHelp(options);
@@ -201,14 +201,7 @@ public class RewriteTsFileTool {
             .build();
     options.addOption(readModeOpt);
 
-    Option ignoreBrokenChunkOpt =
-        Option.builder("ignore-broken")
-            .argName("IgnoreBrokenChunks")
-            .hasArg()
-            .desc("Ignore the broken chunks in the tsfile")
-            .type(boolean.class)
-            .build();
-    options.addOption(ignoreBrokenChunkOpt);
+    options.addOption("ig", "ignore-broken chunks");
     return options;
   }
 
@@ -513,12 +506,13 @@ public class RewriteTsFileTool {
       Decoder defaultTimeDecoder,
       Session session)
       throws IOException, IoTDBConnectionException, 
StatementExecutionException {
+    String measurementId = header.getMeasurementID();
     Tablet tablet =
         new Tablet(
             currentDevice,
             Collections.singletonList(
                 new MeasurementSchema(
-                    header.getMeasurementID(),
+                    measurementId,
                     header.getDataType(),
                     header.getEncodingType(),
                     header.getCompressionType())),
@@ -527,8 +521,8 @@ public class RewriteTsFileTool {
         new PageReader(pageData, header.getDataType(), valueDecoder, 
defaultTimeDecoder, null);
     BatchData batchData = pageReader.getAllSatisfiedPageData();
     while (batchData.hasCurrent()) {
-      tablet.timestamps[tablet.rowSize] = batchData.currentTime();
-      tablet.values[tablet.rowSize++] = batchData.currentValue();
+      tablet.addTimestamp(tablet.rowSize, batchData.currentTime());
+      tablet.addValue(measurementId, tablet.rowSize++, 
batchData.currentValue());
       if (tablet.rowSize >= MAX_TABLET_LENGTH) {
         session.insertTablet(tablet);
         tablet.reset();
@@ -578,23 +572,26 @@ public class RewriteTsFileTool {
           StatementExecutionException, NoMeasurementException {
     List<TsFileResource> resources = new ArrayList<>();
     files.forEach(x -> resources.add(new TsFileResource(x)));
-    try (MultiTsFileDeviceIterator deviceIterator = new 
MultiTsFileDeviceIterator(resources)) {
-      while (deviceIterator.hasNextDevice()) {
-        Pair<String, Boolean> devicePair = deviceIterator.nextDevice();
-        String device = devicePair.left;
-        boolean isAligned = devicePair.right;
-        if (isAligned) {
-          try {
-            writeAlignedSeries(device, deviceIterator, session);
-          } catch (Throwable t) {
-            // this is a broken aligned chunk, skip it
-            System.out.println("Skip aligned chunk " + device);
-          }
-        } else {
-          MultiTsFileDeviceIterator.MeasurementIterator seriesIterator =
-              deviceIterator.iterateNotAlignedSeries(device, true);
-          while (seriesIterator.hasNextSeries()) {
-            writeSingleSeries(device, seriesIterator, session);
+    for (TsFileResource resource : resources) {
+      try (MultiTsFileDeviceIterator deviceIterator =
+          new MultiTsFileDeviceIterator(Collections.singletonList(resource))) {
+        while (deviceIterator.hasNextDevice()) {
+          Pair<String, Boolean> devicePair = deviceIterator.nextDevice();
+          String device = devicePair.left;
+          boolean isAligned = devicePair.right;
+          if (isAligned) {
+            try {
+              writeAlignedSeries(device, deviceIterator, session);
+            } catch (Throwable t) {
+              // this is a broken aligned chunk, skip it
+              System.out.println("Skip aligned chunk " + device);
+            }
+          } else {
+            MultiTsFileDeviceIterator.MeasurementIterator seriesIterator =
+                deviceIterator.iterateNotAlignedSeries(device, true);
+            while (seriesIterator.hasNextSeries()) {
+              writeSingleSeries(device, seriesIterator, session);
+            }
           }
         }
       }
@@ -618,6 +615,7 @@ public class RewriteTsFileTool {
           writeSingleChunk(device, p, chunkMetadata, reader, session);
         } catch (Throwable t) {
           // this is a broken chunk, skip it
+          t.printStackTrace();
           System.out.printf("Skip broken chunk in device %s.%s%n", device, 
p.getMeasurement());
         }
       }
@@ -646,8 +644,33 @@ public class RewriteTsFileTool {
       IPointReader batchIterator = 
chunkReader.nextPageData().getBatchDataIterator();
       while (batchIterator.hasNextTimeValuePair()) {
         TimeValuePair timeValuePair = batchIterator.nextTimeValuePair();
-        tablet.timestamps[tablet.rowSize] = timeValuePair.getTimestamp();
-        tablet.values[tablet.rowSize++] = timeValuePair.getValue();
+        tablet.addTimestamp(tablet.rowSize, timeValuePair.getTimestamp());
+        switch (timeValuePair.getValue().getDataType()) {
+          case TEXT:
+            tablet.addValue(
+                p.getMeasurement(), tablet.rowSize++, 
timeValuePair.getValue().getStringValue());
+            break;
+          case BOOLEAN:
+            tablet.addValue(
+                p.getMeasurement(), tablet.rowSize++, 
timeValuePair.getValue().getBoolean());
+            break;
+          case DOUBLE:
+            tablet.addValue(
+                p.getMeasurement(), tablet.rowSize++, 
timeValuePair.getValue().getDouble());
+            break;
+          case FLOAT:
+            tablet.addValue(
+                p.getMeasurement(), tablet.rowSize++, 
timeValuePair.getValue().getFloat());
+            break;
+          case INT64:
+            tablet.addValue(
+                p.getMeasurement(), tablet.rowSize++, 
timeValuePair.getValue().getLong());
+            break;
+          case INT32:
+            tablet.addValue(
+                p.getMeasurement(), tablet.rowSize++, 
timeValuePair.getValue().getInt());
+            break;
+        }
         if (tablet.rowSize >= MAX_TABLET_LENGTH) {
           session.insertTablet(tablet);
           tablet.reset();
@@ -732,9 +755,12 @@ public class RewriteTsFileTool {
         IBatchDataIterator batchDataIterator =
             alignedChunkReader.nextPageData().getBatchDataIterator();
         while (batchDataIterator.hasNext()) {
+          tablet.addTimestamp(tablet.rowSize, batchDataIterator.currentTime());
           TsPrimitiveType[] pointsData = (TsPrimitiveType[]) 
batchDataIterator.currentValue();
-          tablet.timestamps[tablet.rowSize] = batchDataIterator.currentTime();
-          tablet.values[tablet.rowSize++] = batchDataIterator.currentValue();
+          for (int i = 0; i < schemaList.size(); ++i) {
+            tablet.addValue(schemaList.get(i).getMeasurementId(), 
tablet.rowSize, pointsData[i]);
+          }
+          tablet.rowSize++;
           batchDataIterator.next();
           if (tablet.rowSize >= MAX_TABLET_LENGTH) {
             session.insertAlignedTablet(tablet);

Reply via email to