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));
