|
25 | 25 | import org.apache.tsfile.file.MetaMarker; |
26 | 26 | import org.apache.tsfile.file.header.ChunkHeader; |
27 | 27 | import org.apache.tsfile.file.header.PageHeader; |
| 28 | +import org.apache.tsfile.file.metadata.AlignedChunkMetadata; |
28 | 29 | import org.apache.tsfile.file.metadata.ChunkMetadata; |
| 30 | +import org.apache.tsfile.file.metadata.IDeviceID; |
29 | 31 | import org.apache.tsfile.file.metadata.PlainDeviceID; |
30 | 32 | import org.apache.tsfile.file.metadata.enums.TSEncoding; |
31 | 33 | import org.apache.tsfile.fileSystem.FSFactoryProducer; |
| 34 | +import org.apache.tsfile.read.TsFileDeviceIterator; |
32 | 35 | import org.apache.tsfile.read.TsFileReader; |
33 | 36 | import org.apache.tsfile.read.TsFileSequenceReader; |
34 | 37 | import org.apache.tsfile.read.common.Chunk; |
35 | 38 | import org.apache.tsfile.read.common.Path; |
36 | 39 | import org.apache.tsfile.read.expression.QueryExpression; |
37 | 40 | import org.apache.tsfile.read.query.dataset.QueryDataSet; |
38 | 41 | import org.apache.tsfile.utils.Binary; |
| 42 | +import org.apache.tsfile.utils.Pair; |
39 | 43 | import org.apache.tsfile.utils.TsFileGeneratorUtils; |
40 | 44 | import org.apache.tsfile.write.chunk.AlignedChunkWriterImpl; |
41 | 45 | import org.apache.tsfile.write.chunk.ChunkWriterImpl; |
|
54 | 58 | import java.nio.ByteBuffer; |
55 | 59 | import java.time.LocalDate; |
56 | 60 | import java.util.ArrayList; |
| 61 | +import java.util.Arrays; |
57 | 62 | import java.util.Collections; |
58 | 63 | import java.util.List; |
59 | 64 |
|
@@ -810,4 +815,83 @@ public void writeTsFileByFlushingPageDirectly() throws IOException, WriteProcess |
810 | 815 | throw throwable; |
811 | 816 | } |
812 | 817 | } |
| 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 | + } |
813 | 897 | } |
0 commit comments