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

jackietien pushed a commit to branch iotdb
in repository https://gitbox.apache.org/repos/asf/tsfile.git

commit 448b812e69396bf0bf33633406ff831ee48a2834
Author: Chen YZ <[email protected]>
AuthorDate: Tue May 21 09:12:20 2024 +0800

    Add new data type example and pom.xml
---
 java/examples/pom.xml                              |  5 +++
 .../src/main/java/org/apache/tsfile/Constant.java  |  4 +++
 .../tsfile/{Constant.java => DataGenerator.java}   | 37 ++++++++++++++++------
 .../main/java/org/apache/tsfile/TsFileRead.java    |  8 +++++
 .../tsfile/TsFileWriteAlignedWithTSRecord.java     | 21 +++++++++---
 .../tsfile/TsFileWriteAlignedWithTablet.java       | 28 ++++++++++------
 .../org/apache/tsfile/TsFileWriteWithTSRecord.java | 16 ++++++++--
 .../org/apache/tsfile/TsFileWriteWithTablet.java   | 23 +++++++++-----
 .../file/metadata/statistics/BlobStatistics.java   |  7 +++-
 .../java/org/apache/tsfile/read/common/Field.java  |  4 ++-
 .../write/chunk/AlignedChunkGroupWriterImpl.java   |  9 +++++-
 .../chunk/NonAlignedChunkGroupWriterImpl.java      | 10 +++++-
 .../tsfile/write/record/datapoint/DataPoint.java   |  5 ++-
 13 files changed, 139 insertions(+), 38 deletions(-)

diff --git a/java/examples/pom.xml b/java/examples/pom.xml
index 56cead5e..0d0272ed 100644
--- a/java/examples/pom.xml
+++ b/java/examples/pom.xml
@@ -30,6 +30,11 @@
     <packaging>pom</packaging>
     <name>TSFile: Java: Examples</name>
     <dependencies>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>1.3.13</version>
+        </dependency>
         <dependency>
             <groupId>org.apache.tsfile</groupId>
             <artifactId>tsfile</artifactId>
diff --git a/java/examples/src/main/java/org/apache/tsfile/Constant.java 
b/java/examples/src/main/java/org/apache/tsfile/Constant.java
index a6a5bc95..99895614 100644
--- a/java/examples/src/main/java/org/apache/tsfile/Constant.java
+++ b/java/examples/src/main/java/org/apache/tsfile/Constant.java
@@ -26,6 +26,10 @@ public class Constant {
   static final String SENSOR_1 = "sensor_1";
   static final String SENSOR_2 = "sensor_2";
   static final String SENSOR_3 = "sensor_3";
+  static final String SENSOR_4 = "sensor_4";
+  static final String SENSOR_5 = "sensor_5";
+  static final String SENSOR_6 = "sensor_6";
+  static final String SENSOR_7 = "sensor_7";
 
   static final String DEVICE_PREFIX = "device_";
   static final String DEVICE_1 = "root.sg.device_1";
diff --git a/java/examples/src/main/java/org/apache/tsfile/Constant.java 
b/java/examples/src/main/java/org/apache/tsfile/DataGenerator.java
similarity index 51%
copy from java/examples/src/main/java/org/apache/tsfile/Constant.java
copy to java/examples/src/main/java/org/apache/tsfile/DataGenerator.java
index a6a5bc95..159e2ea6 100644
--- a/java/examples/src/main/java/org/apache/tsfile/Constant.java
+++ b/java/examples/src/main/java/org/apache/tsfile/DataGenerator.java
@@ -19,15 +19,34 @@
 
 package org.apache.tsfile;
 
-public class Constant {
+import org.apache.tsfile.common.conf.TSFileConfig;
+import org.apache.tsfile.enums.TSDataType;
+import org.apache.tsfile.utils.Binary;
 
-  private Constant() {}
+import java.time.LocalDate;
 
-  static final String SENSOR_1 = "sensor_1";
-  static final String SENSOR_2 = "sensor_2";
-  static final String SENSOR_3 = "sensor_3";
-
-  static final String DEVICE_PREFIX = "device_";
-  static final String DEVICE_1 = "root.sg.device_1";
-  static final String DEVICE_2 = "root.sg.device_2";
+public class DataGenerator {
+  public static Object generate(TSDataType type, int index) {
+    switch (type) {
+      case INT32:
+        return index;
+      case INT64:
+      case TIMESTAMP:
+        return (long) index;
+      case FLOAT:
+        return (float) index;
+      case DOUBLE:
+        return (double) index;
+      case BOOLEAN:
+        return index % 2 == 0;
+      case DATE:
+        return LocalDate.of(2024, 1, index % 30 + 1);
+      case TEXT:
+      case STRING:
+      case BLOB:
+        return new Binary(String.valueOf(index), TSFileConfig.STRING_CHARSET);
+      default:
+        return null;
+    }
+  }
 }
diff --git a/java/examples/src/main/java/org/apache/tsfile/TsFileRead.java 
b/java/examples/src/main/java/org/apache/tsfile/TsFileRead.java
index cb94e9b6..64ef6f99 100644
--- a/java/examples/src/main/java/org/apache/tsfile/TsFileRead.java
+++ b/java/examples/src/main/java/org/apache/tsfile/TsFileRead.java
@@ -41,6 +41,10 @@ import static org.apache.tsfile.Constant.DEVICE_1;
 import static org.apache.tsfile.Constant.SENSOR_1;
 import static org.apache.tsfile.Constant.SENSOR_2;
 import static org.apache.tsfile.Constant.SENSOR_3;
+import static org.apache.tsfile.Constant.SENSOR_4;
+import static org.apache.tsfile.Constant.SENSOR_5;
+import static org.apache.tsfile.Constant.SENSOR_6;
+import static org.apache.tsfile.Constant.SENSOR_7;
 
 /**
  * The class is to show how to read TsFile file named "test.tsfile". The 
TsFile file "test.tsfile"
@@ -76,6 +80,10 @@ public class TsFileRead {
       paths.add(new Path(DEVICE_1, SENSOR_1, true));
       paths.add(new Path(DEVICE_1, SENSOR_2, true));
       paths.add(new Path(DEVICE_1, SENSOR_3, true));
+      paths.add(new Path(DEVICE_1, SENSOR_4, true));
+      paths.add(new Path(DEVICE_1, SENSOR_5, true));
+      paths.add(new Path(DEVICE_1, SENSOR_6, true));
+      paths.add(new Path(DEVICE_1, SENSOR_7, true));
 
       // no filter, should select 1 2 3 4 6 7 8
       queryAndPrint(paths, readTsFile, null);
diff --git 
a/java/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTSRecord.java
 
b/java/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTSRecord.java
index d218fc94..d5a5c523 100644
--- 
a/java/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTSRecord.java
+++ 
b/java/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTSRecord.java
@@ -27,7 +27,6 @@ import org.apache.tsfile.read.common.Path;
 import org.apache.tsfile.write.TsFileWriter;
 import org.apache.tsfile.write.record.TSRecord;
 import org.apache.tsfile.write.record.datapoint.DataPoint;
-import org.apache.tsfile.write.record.datapoint.LongDataPoint;
 import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 
@@ -39,6 +38,7 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 public class TsFileWriteAlignedWithTSRecord {
   private static final Logger logger =
@@ -62,12 +62,20 @@ public class TsFileWriteAlignedWithTSRecord {
           new MeasurementSchema(Constant.SENSOR_2, TSDataType.INT64, 
TSEncoding.RLE));
       measurementSchemas.add(
           new MeasurementSchema(Constant.SENSOR_3, TSDataType.INT64, 
TSEncoding.RLE));
+      measurementSchemas.add(
+          new MeasurementSchema(Constant.SENSOR_4, TSDataType.BLOB, 
TSEncoding.PLAIN));
+      measurementSchemas.add(
+          new MeasurementSchema(Constant.SENSOR_5, TSDataType.STRING, 
TSEncoding.PLAIN));
+      measurementSchemas.add(
+          new MeasurementSchema(Constant.SENSOR_6, TSDataType.DATE, 
TSEncoding.PLAIN));
+      measurementSchemas.add(
+          new MeasurementSchema(Constant.SENSOR_7, TSDataType.TIMESTAMP, 
TSEncoding.PLAIN));
 
       // register timeseries
       tsFileWriter.registerAlignedTimeseries(new Path(Constant.DEVICE_1), 
measurementSchemas);
 
       // example1
-      writeAligned(tsFileWriter, Constant.DEVICE_1, measurementSchemas, 
1000000, 0, 0);
+      writeAligned(tsFileWriter, Constant.DEVICE_1, measurementSchemas, 10000, 
0, 0);
     } catch (WriteProcessException e) {
       logger.error("write TSRecord failed", e);
     }
@@ -85,8 +93,13 @@ public class TsFileWriteAlignedWithTSRecord {
       // construct TsRecord
       TSRecord tsRecord = new TSRecord(time, deviceId);
       for (IMeasurementSchema schema : schemas) {
-        DataPoint dPoint = new LongDataPoint(schema.getMeasurementId(), 
startValue++);
-        tsRecord.addTuple(dPoint);
+        tsRecord.addTuple(
+            DataPoint.getDataPoint(
+                schema.getType(),
+                schema.getMeasurementId(),
+                
Objects.requireNonNull(DataGenerator.generate(schema.getType(), (int) 
startValue))
+                    .toString()));
+        startValue++;
       }
       // write
       tsFileWriter.writeAligned(tsRecord);
diff --git 
a/java/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTablet.java
 
b/java/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTablet.java
index d82acc62..7f7f6f36 100644
--- 
a/java/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTablet.java
+++ 
b/java/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTablet.java
@@ -19,13 +19,11 @@
 
 package org.apache.tsfile;
 
-import org.apache.tsfile.common.conf.TSFileConfig;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.exception.write.WriteProcessException;
 import org.apache.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.tsfile.fileSystem.FSFactoryProducer;
 import org.apache.tsfile.read.common.Path;
-import org.apache.tsfile.utils.Binary;
 import org.apache.tsfile.write.TsFileWriter;
 import org.apache.tsfile.write.record.Tablet;
 import org.apache.tsfile.write.schema.MeasurementSchema;
@@ -43,7 +41,6 @@ import static org.apache.tsfile.Constant.DEVICE_1;
 import static org.apache.tsfile.Constant.DEVICE_2;
 import static org.apache.tsfile.Constant.SENSOR_1;
 import static org.apache.tsfile.Constant.SENSOR_2;
-import static org.apache.tsfile.Constant.SENSOR_3;
 
 public class TsFileWriteAlignedWithTablet {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(TsFileWriteAlignedWithTablet.class);
@@ -60,15 +57,26 @@ public class TsFileWriteAlignedWithTablet {
 
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       List<MeasurementSchema> measurementSchemas = new ArrayList<>();
-      measurementSchemas.add(new MeasurementSchema(SENSOR_1, TSDataType.TEXT, 
TSEncoding.PLAIN));
-      measurementSchemas.add(new MeasurementSchema(SENSOR_2, TSDataType.TEXT, 
TSEncoding.PLAIN));
-      measurementSchemas.add(new MeasurementSchema(SENSOR_3, TSDataType.TEXT, 
TSEncoding.PLAIN));
+      measurementSchemas.add(
+          new MeasurementSchema(Constant.SENSOR_1, TSDataType.INT64, 
TSEncoding.PLAIN));
+      measurementSchemas.add(
+          new MeasurementSchema(Constant.SENSOR_2, TSDataType.INT64, 
TSEncoding.PLAIN));
+      measurementSchemas.add(
+          new MeasurementSchema(Constant.SENSOR_3, TSDataType.INT64, 
TSEncoding.PLAIN));
+      measurementSchemas.add(
+          new MeasurementSchema(Constant.SENSOR_4, TSDataType.BLOB, 
TSEncoding.PLAIN));
+      measurementSchemas.add(
+          new MeasurementSchema(Constant.SENSOR_5, TSDataType.STRING, 
TSEncoding.PLAIN));
+      measurementSchemas.add(
+          new MeasurementSchema(Constant.SENSOR_6, TSDataType.DATE, 
TSEncoding.PLAIN));
+      measurementSchemas.add(
+          new MeasurementSchema(Constant.SENSOR_7, TSDataType.TIMESTAMP, 
TSEncoding.PLAIN));
 
       // register align timeseries
       tsFileWriter.registerAlignedTimeseries(new Path(DEVICE_1), 
measurementSchemas);
 
       // example 1
-      writeAlignedWithTablet(tsFileWriter, DEVICE_1, measurementSchemas, 
200000, 0, 0);
+      writeAlignedWithTablet(tsFileWriter, DEVICE_1, measurementSchemas, 
10000, 0, 0);
 
       writeNonAlignedWithTablet(tsFileWriter); // write nonAligned timeseries
     } catch (WriteProcessException e) {
@@ -93,8 +101,10 @@ public class TsFileWriteAlignedWithTablet {
       int row = tablet.rowSize++;
       timestamps[row] = startTime++;
       for (int i = 0; i < sensorNum; i++) {
-        Binary[] textSensor = (Binary[]) values[i];
-        textSensor[row] = new Binary("testString.........", 
TSFileConfig.STRING_CHARSET);
+        tablet.addValue(
+            schemas.get(i).getMeasurementId(),
+            row,
+            DataGenerator.generate(schemas.get(i).getType(), (int) r));
       }
       // write
       if (tablet.rowSize == tablet.getMaxRowNumber()) {
diff --git 
a/java/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTSRecord.java 
b/java/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTSRecord.java
index 3d0d7ff7..4234c830 100644
--- a/java/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTSRecord.java
+++ b/java/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTSRecord.java
@@ -27,7 +27,6 @@ import org.apache.tsfile.read.common.Path;
 import org.apache.tsfile.write.TsFileWriter;
 import org.apache.tsfile.write.record.TSRecord;
 import org.apache.tsfile.write.record.datapoint.DataPoint;
-import org.apache.tsfile.write.record.datapoint.LongDataPoint;
 import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 
@@ -39,6 +38,7 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * An example of writing data with TSRecord to TsFile It uses the interface: 
public void
@@ -60,6 +60,11 @@ public class TsFileWriteWithTSRecord {
         schemas.add(new MeasurementSchema(Constant.SENSOR_1, TSDataType.INT64, 
TSEncoding.RLE));
         schemas.add(new MeasurementSchema(Constant.SENSOR_2, TSDataType.INT64, 
TSEncoding.RLE));
         schemas.add(new MeasurementSchema(Constant.SENSOR_3, TSDataType.INT64, 
TSEncoding.RLE));
+        schemas.add(new MeasurementSchema(Constant.SENSOR_4, TSDataType.BLOB, 
TSEncoding.PLAIN));
+        schemas.add(new MeasurementSchema(Constant.SENSOR_5, 
TSDataType.STRING, TSEncoding.PLAIN));
+        schemas.add(new MeasurementSchema(Constant.SENSOR_6, TSDataType.DATE, 
TSEncoding.PLAIN));
+        schemas.add(
+            new MeasurementSchema(Constant.SENSOR_7, TSDataType.TIMESTAMP, 
TSEncoding.PLAIN));
 
         // register timeseries
         tsFileWriter.registerTimeseries(new Path(Constant.DEVICE_1), schemas);
@@ -84,8 +89,13 @@ public class TsFileWriteWithTSRecord {
       // construct TsRecord
       TSRecord tsRecord = new TSRecord(time, deviceId);
       for (IMeasurementSchema schema : schemas) {
-        DataPoint dPoint = new LongDataPoint(schema.getMeasurementId(), 
startValue++);
-        tsRecord.addTuple(dPoint);
+        tsRecord.addTuple(
+            DataPoint.getDataPoint(
+                schema.getType(),
+                schema.getMeasurementId(),
+                
Objects.requireNonNull(DataGenerator.generate(schema.getType(), (int) 
startValue))
+                    .toString()));
+        startValue++;
       }
       // write
       tsFileWriter.write(tsRecord);
diff --git 
a/java/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTablet.java 
b/java/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTablet.java
index 2461f1da..a9c572e2 100644
--- a/java/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTablet.java
+++ b/java/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTablet.java
@@ -19,13 +19,11 @@
 
 package org.apache.tsfile;
 
-import org.apache.tsfile.common.conf.TSFileConfig;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.exception.write.WriteProcessException;
 import org.apache.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.tsfile.fileSystem.FSFactoryProducer;
 import org.apache.tsfile.read.common.Path;
-import org.apache.tsfile.utils.Binary;
 import org.apache.tsfile.write.TsFileWriter;
 import org.apache.tsfile.write.record.Tablet;
 import org.apache.tsfile.write.schema.MeasurementSchema;
@@ -55,11 +53,19 @@ public class TsFileWriteWithTablet {
       try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
         List<MeasurementSchema> measurementSchemas = new ArrayList<>();
         measurementSchemas.add(
-            new MeasurementSchema(Constant.SENSOR_1, TSDataType.TEXT, 
TSEncoding.PLAIN));
+            new MeasurementSchema(Constant.SENSOR_1, TSDataType.INT64, 
TSEncoding.PLAIN));
         measurementSchemas.add(
-            new MeasurementSchema(Constant.SENSOR_2, TSDataType.TEXT, 
TSEncoding.PLAIN));
+            new MeasurementSchema(Constant.SENSOR_2, TSDataType.INT64, 
TSEncoding.PLAIN));
         measurementSchemas.add(
-            new MeasurementSchema(Constant.SENSOR_3, TSDataType.TEXT, 
TSEncoding.PLAIN));
+            new MeasurementSchema(Constant.SENSOR_3, TSDataType.INT64, 
TSEncoding.PLAIN));
+        measurementSchemas.add(
+            new MeasurementSchema(Constant.SENSOR_4, TSDataType.BLOB, 
TSEncoding.PLAIN));
+        measurementSchemas.add(
+            new MeasurementSchema(Constant.SENSOR_5, TSDataType.STRING, 
TSEncoding.PLAIN));
+        measurementSchemas.add(
+            new MeasurementSchema(Constant.SENSOR_6, TSDataType.DATE, 
TSEncoding.PLAIN));
+        measurementSchemas.add(
+            new MeasurementSchema(Constant.SENSOR_7, TSDataType.TIMESTAMP, 
TSEncoding.PLAIN));
 
         // register nonAligned timeseries
         tsFileWriter.registerTimeseries(new Path(Constant.DEVICE_1), 
measurementSchemas);
@@ -82,15 +88,16 @@ public class TsFileWriteWithTablet {
       throws IOException, WriteProcessException {
     Tablet tablet = new Tablet(deviceId, schemas);
     long[] timestamps = tablet.timestamps;
-    Object[] values = tablet.values;
     long sensorNum = schemas.size();
 
     for (long r = 0; r < rowNum; r++, startValue++) {
       int row = tablet.rowSize++;
       timestamps[row] = startTime++;
       for (int i = 0; i < sensorNum; i++) {
-        Binary[] textSensor = (Binary[]) values[i];
-        textSensor[row] = new Binary("testString.........", 
TSFileConfig.STRING_CHARSET);
+        tablet.addValue(
+            schemas.get(i).getMeasurementId(),
+            row,
+            DataGenerator.generate(schemas.get(i).getType(), (int) r));
       }
       // write
       if (tablet.rowSize == tablet.getMaxRowNumber()) {
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/statistics/BlobStatistics.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/statistics/BlobStatistics.java
index c0f3d2bc..f8cb18fa 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/statistics/BlobStatistics.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/statistics/BlobStatistics.java
@@ -58,7 +58,9 @@ public class BlobStatistics extends Statistics<Binary> {
   }
 
   public void updateStats(Binary value) {
-    // do nothing
+    if (isEmpty) {
+      isEmpty = false;
+    }
   }
 
   @Override
@@ -111,6 +113,9 @@ public class BlobStatistics extends Statistics<Binary> {
   @Override
   protected void mergeStatisticsValue(Statistics<Binary> stats) {
     // do nothing
+    if (isEmpty) {
+      isEmpty = false;
+    }
   }
 
   @Override
diff --git a/java/tsfile/src/main/java/org/apache/tsfile/read/common/Field.java 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/Field.java
index aaa2f2f9..01d4dcdb 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/Field.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/Field.java
@@ -22,6 +22,7 @@ package org.apache.tsfile.read.common;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.exception.NullFieldException;
 import org.apache.tsfile.utils.Binary;
+import org.apache.tsfile.utils.BytesUtils;
 import org.apache.tsfile.utils.DateUtils;
 import org.apache.tsfile.utils.TsPrimitiveType;
 import org.apache.tsfile.write.UnSupportedDataTypeException;
@@ -180,9 +181,10 @@ public class Field {
       case DOUBLE:
         return String.valueOf(doubleV);
       case TEXT:
-      case BLOB:
       case STRING:
         return binaryV.toString();
+      case BLOB:
+        return BytesUtils.parseBlobByteArrayToString(binaryV.getValues());
       default:
         throw new UnSupportedDataTypeException(dataType.toString());
     }
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java
index f0e4055a..ecd974f8 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java
@@ -29,6 +29,7 @@ import org.apache.tsfile.file.metadata.PlainDeviceID;
 import org.apache.tsfile.file.metadata.enums.CompressionType;
 import org.apache.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.tsfile.utils.Binary;
+import org.apache.tsfile.utils.DateUtils;
 import org.apache.tsfile.write.UnSupportedDataTypeException;
 import org.apache.tsfile.write.record.Tablet;
 import org.apache.tsfile.write.record.datapoint.DataPoint;
@@ -39,6 +40,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -184,9 +186,14 @@ public class AlignedChunkGroupWriterImpl implements 
IChunkGroupWriter {
             valueChunkWriter.write(time, ((boolean[]) 
tablet.values[columnIndex])[row], isNull);
             break;
           case INT32:
-          case DATE:
             valueChunkWriter.write(time, ((int[]) 
tablet.values[columnIndex])[row], isNull);
             break;
+          case DATE:
+            valueChunkWriter.write(
+                time,
+                DateUtils.parseDateExpressionToInt(((LocalDate[]) 
tablet.values[columnIndex])[row]),
+                isNull);
+            break;
           case INT64:
           case TIMESTAMP:
             valueChunkWriter.write(time, ((long[]) 
tablet.values[columnIndex])[row], isNull);
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/NonAlignedChunkGroupWriterImpl.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/NonAlignedChunkGroupWriterImpl.java
index 42485ac7..2cb3c1e4 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/NonAlignedChunkGroupWriterImpl.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/NonAlignedChunkGroupWriterImpl.java
@@ -24,6 +24,7 @@ import 
org.apache.tsfile.exception.write.WriteProcessException;
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.file.metadata.PlainDeviceID;
 import org.apache.tsfile.utils.Binary;
+import org.apache.tsfile.utils.DateUtils;
 import org.apache.tsfile.write.UnSupportedDataTypeException;
 import org.apache.tsfile.write.record.Tablet;
 import org.apache.tsfile.write.record.datapoint.DataPoint;
@@ -35,6 +36,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
+import java.time.LocalDate;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -109,9 +111,15 @@ public class NonAlignedChunkGroupWriterImpl implements 
IChunkGroupWriter {
         pointCount++;
         switch (tsDataType) {
           case INT32:
-          case DATE:
             chunkWriters.get(measurementId).write(time, ((int[]) 
tablet.values[column])[row]);
             break;
+          case DATE:
+            chunkWriters
+                .get(measurementId)
+                .write(
+                    time,
+                    DateUtils.parseDateExpressionToInt(((LocalDate[]) 
tablet.values[column])[row]));
+            break;
           case INT64:
           case TIMESTAMP:
             chunkWriters.get(measurementId).write(time, ((long[]) 
tablet.values[column])[row]);
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/write/record/datapoint/DataPoint.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/write/record/datapoint/DataPoint.java
index 6f5e4a08..b94503ed 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/write/record/datapoint/DataPoint.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/write/record/datapoint/DataPoint.java
@@ -22,6 +22,7 @@ package org.apache.tsfile.write.record.datapoint;
 import org.apache.tsfile.common.conf.TSFileConfig;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.utils.Binary;
+import org.apache.tsfile.utils.DateUtils;
 import org.apache.tsfile.utils.StringContainer;
 import org.apache.tsfile.write.UnSupportedDataTypeException;
 import org.apache.tsfile.write.chunk.ChunkWriterImpl;
@@ -64,9 +65,11 @@ public abstract class DataPoint {
     try {
       switch (dataType) {
         case INT32:
-        case DATE:
           dataPoint = new IntDataPoint(measurementId, Integer.parseInt(value));
           break;
+        case DATE:
+          dataPoint = new IntDataPoint(measurementId, 
DateUtils.parseDateExpressionToInt(value));
+          break;
         case INT64:
         case TIMESTAMP:
           dataPoint = new LongDataPoint(measurementId, Long.parseLong(value));

Reply via email to