Skip to content

Commit c5339fd

Browse files
authored
Init all series writer for AlignedChunkGroupWriter (#637)
1 parent dbc3d43 commit c5339fd

2 files changed

Lines changed: 95 additions & 1 deletion

File tree

java/tsfile/src/main/java/org/apache/tsfile/write/TsFileWriter.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,11 +462,13 @@ private List<MeasurementSchema> checkIsAllMeasurementsInGroup(
462462
return schemas;
463463
}
464464

465-
private IChunkGroupWriter tryToInitialGroupWriter(IDeviceID deviceId, boolean isAligned) {
465+
private IChunkGroupWriter tryToInitialGroupWriter(IDeviceID deviceId, boolean isAligned)
466+
throws IOException {
466467
IChunkGroupWriter groupWriter;
467468
if (!groupWriters.containsKey(deviceId)) {
468469
if (isAligned) {
469470
groupWriter = new AlignedChunkGroupWriterImpl(deviceId);
471+
initAllSeriesWriterForAlignedSeries((AlignedChunkGroupWriterImpl) groupWriter, deviceId);
470472
if (!isUnseq) { // Sequence File
471473
((AlignedChunkGroupWriterImpl) groupWriter)
472474
.setLastTime(alignedDeviceLastTimeMap.get(deviceId));
@@ -486,6 +488,14 @@ private IChunkGroupWriter tryToInitialGroupWriter(IDeviceID deviceId, boolean is
486488
return groupWriter;
487489
}
488490

491+
private void initAllSeriesWriterForAlignedSeries(
492+
AlignedChunkGroupWriterImpl alignedChunkGroupWriter, IDeviceID deviceID) throws IOException {
493+
MeasurementGroup deviceSchema = schema.getSeriesSchema(new Path(deviceID));
494+
for (MeasurementSchema measurementSchema : deviceSchema.getMeasurementSchemaMap().values()) {
495+
alignedChunkGroupWriter.tryToAddSeriesWriter(measurementSchema);
496+
}
497+
}
498+
489499
/**
490500
* write a record in type of T.
491501
*

java/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriteApiTest.java

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,21 @@
2525
import org.apache.tsfile.file.MetaMarker;
2626
import org.apache.tsfile.file.header.ChunkHeader;
2727
import org.apache.tsfile.file.header.PageHeader;
28+
import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
2829
import org.apache.tsfile.file.metadata.ChunkMetadata;
30+
import org.apache.tsfile.file.metadata.IDeviceID;
2931
import org.apache.tsfile.file.metadata.PlainDeviceID;
3032
import org.apache.tsfile.file.metadata.enums.TSEncoding;
3133
import org.apache.tsfile.fileSystem.FSFactoryProducer;
34+
import org.apache.tsfile.read.TsFileDeviceIterator;
3235
import org.apache.tsfile.read.TsFileReader;
3336
import org.apache.tsfile.read.TsFileSequenceReader;
3437
import org.apache.tsfile.read.common.Chunk;
3538
import org.apache.tsfile.read.common.Path;
3639
import org.apache.tsfile.read.expression.QueryExpression;
3740
import org.apache.tsfile.read.query.dataset.QueryDataSet;
3841
import org.apache.tsfile.utils.Binary;
42+
import org.apache.tsfile.utils.Pair;
3943
import org.apache.tsfile.utils.TsFileGeneratorUtils;
4044
import org.apache.tsfile.write.chunk.AlignedChunkWriterImpl;
4145
import org.apache.tsfile.write.chunk.ChunkWriterImpl;
@@ -54,6 +58,7 @@
5458
import java.nio.ByteBuffer;
5559
import java.time.LocalDate;
5660
import java.util.ArrayList;
61+
import java.util.Arrays;
5762
import java.util.Collections;
5863
import java.util.List;
5964

@@ -810,4 +815,83 @@ public void writeTsFileByFlushingPageDirectly() throws IOException, WriteProcess
810815
throw throwable;
811816
}
812817
}
818+
819+
@Test
820+
public void testWriteSomeColumnsOfTree() throws IOException, WriteProcessException {
821+
List<MeasurementSchema> fullMeasurementSchemas =
822+
Arrays.asList(
823+
new MeasurementSchema("s1", TSDataType.INT32),
824+
new MeasurementSchema("s2", TSDataType.INT32),
825+
new MeasurementSchema("s3", TSDataType.INT32));
826+
List<MeasurementSchema> measurementSchemas1 =
827+
Arrays.asList(new MeasurementSchema("s1", TSDataType.INT32));
828+
String device = "root.test.d1";
829+
Tablet tablet1 = new Tablet(device, fullMeasurementSchemas);
830+
Tablet tablet2 = new Tablet(device, measurementSchemas1);
831+
for (int i = 0; i < 1000; i++) {
832+
tablet1.addTimestamp(i, i);
833+
tablet1.addValue("s1", i, 1);
834+
tablet1.addValue("s2", i, 1);
835+
tablet1.addValue("s3", i, 1);
836+
}
837+
tablet1.rowSize = 1000;
838+
for (int i = 0; i < 1000; i++) {
839+
tablet2.addTimestamp(i, i + 1005);
840+
tablet2.addValue("s1", i, 0);
841+
}
842+
tablet2.rowSize = 1000;
843+
try (TsFileWriter writer = new TsFileWriter(f)) {
844+
writer.registerAlignedTimeseries(new Path(device), fullMeasurementSchemas);
845+
writer.writeAligned(tablet1);
846+
writer.flushAllChunkGroups();
847+
writer.writeAligned(tablet2);
848+
writer.flushAllChunkGroups();
849+
}
850+
try (TsFileSequenceReader reader = new TsFileSequenceReader(f.getPath())) {
851+
TsFileDeviceIterator deviceIterator = reader.getAllDevicesIteratorWithIsAligned();
852+
while (deviceIterator.hasNext()) {
853+
Pair<IDeviceID, Boolean> pair = deviceIterator.next();
854+
List<AlignedChunkMetadata> alignedChunkMetadataList =
855+
reader.getAlignedChunkMetadataByMetadataIndexNode(
856+
pair.getLeft(), deviceIterator.getFirstMeasurementNodeOfCurrentDevice());
857+
Assert.assertFalse(alignedChunkMetadataList.isEmpty());
858+
Assert.assertEquals(3, alignedChunkMetadataList.get(0).getValueChunkMetadataList().size());
859+
Assert.assertEquals(
860+
1000,
861+
alignedChunkMetadataList
862+
.get(0)
863+
.getValueChunkMetadataList()
864+
.get(0)
865+
.getStatistics()
866+
.getCount());
867+
Assert.assertEquals(
868+
1000,
869+
alignedChunkMetadataList
870+
.get(0)
871+
.getValueChunkMetadataList()
872+
.get(1)
873+
.getStatistics()
874+
.getCount());
875+
Assert.assertEquals(
876+
1000,
877+
alignedChunkMetadataList
878+
.get(0)
879+
.getValueChunkMetadataList()
880+
.get(2)
881+
.getStatistics()
882+
.getCount());
883+
Assert.assertEquals(3, alignedChunkMetadataList.get(1).getValueChunkMetadataList().size());
884+
Assert.assertEquals(
885+
1000,
886+
alignedChunkMetadataList
887+
.get(1)
888+
.getValueChunkMetadataList()
889+
.get(0)
890+
.getStatistics()
891+
.getCount());
892+
Assert.assertNull(alignedChunkMetadataList.get(1).getValueChunkMetadataList().get(1));
893+
Assert.assertNull(alignedChunkMetadataList.get(1).getValueChunkMetadataList().get(2));
894+
}
895+
}
896+
}
813897
}

0 commit comments

Comments
 (0)