This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch TableDeviceChunkMetadata in repository https://gitbox.apache.org/repos/asf/tsfile.git
commit 35196b44fa29156189f0be0e03c9333e9a0e3e30 Author: JackieTien97 <[email protected]> AuthorDate: Sat Jan 25 18:01:32 2025 +0800 Add TableDeviceChunkMetadata --- ...data.java => AbstractAlignedChunkMetadata.java} | 27 +--- .../AbstractAlignedTimeSeriesMetadata.java | 13 +- .../tsfile/file/metadata/AlignedChunkMetadata.java | 166 +-------------------- .../file/metadata/AlignedTimeSeriesMetadata.java | 8 +- ...Metadata.java => TableDeviceChunkMetadata.java} | 26 +--- ...ata.java => TableDeviceTimeSeriesMetadata.java} | 14 +- .../apache/tsfile/read/TsFileSequenceReader.java | 6 +- 7 files changed, 41 insertions(+), 219 deletions(-) diff --git a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java similarity index 85% copy from java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java copy to java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java index c92443be1..4bbc28581 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java @@ -29,29 +29,22 @@ import java.io.Serializable; import java.util.List; import java.util.Optional; -public class AlignedChunkMetadata implements IChunkMetadata { +public abstract class AbstractAlignedChunkMetadata implements IChunkMetadata { // ChunkMetadata for time column - private final IChunkMetadata timeChunkMetadata; + protected final IChunkMetadata timeChunkMetadata; // ChunkMetadata for all subSensors in the vector - private final List<IChunkMetadata> valueChunkMetadataList; + protected final List<IChunkMetadata> valueChunkMetadataList; /** ChunkLoader of metadata, used to create IChunkReader */ private IChunkLoader chunkLoader; - public AlignedChunkMetadata( + AbstractAlignedChunkMetadata( IChunkMetadata timeChunkMetadata, List<IChunkMetadata> valueChunkMetadataList) { this.timeChunkMetadata = timeChunkMetadata; this.valueChunkMetadataList = valueChunkMetadataList; } - @Override - public Statistics<? extends Serializable> getStatistics() { - return valueChunkMetadataList.size() == 1 && valueChunkMetadataList.get(0) != null - ? valueChunkMetadataList.get(0).getStatistics() - : timeChunkMetadata.getStatistics(); - } - @Override public Statistics<? extends Serializable> getTimeStatistics() { return timeChunkMetadata.getStatistics(); @@ -77,18 +70,6 @@ public class AlignedChunkMetadata implements IChunkMetadata { return valueChunkMetadataList.size(); } - @Override - public boolean timeAllSelected() { - for (int index = 0; index < getMeasurementCount(); index++) { - if (!hasNullValue(index)) { - // When there is any value page point number that is the same as the time page, - // it means that all timestamps in time page will be selected. - return true; - } - } - return false; - } - @Override public boolean isModified() { return timeChunkMetadata.isModified(); diff --git a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java index f9762f07e..f793f7c5d 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java @@ -112,7 +112,7 @@ public abstract class AbstractAlignedTimeSeriesMetadata implements ITimeSeriesMe return chunkMetadataLoader.loadChunkMetadataList(this); } - public List<AlignedChunkMetadata> getCopiedChunkMetadataList() { + public List<AbstractAlignedChunkMetadata> getCopiedChunkMetadataList() { List<IChunkMetadata> timeChunkMetadata = timeseriesMetadata.getCopiedChunkMetadataList(); List<List<IChunkMetadata>> valueChunkMetadataList = new ArrayList<>(); for (TimeseriesMetadata metadata : valueTimeseriesMetadataList) { @@ -122,7 +122,7 @@ public abstract class AbstractAlignedTimeSeriesMetadata implements ITimeSeriesMe return getAlignedChunkMetadata(timeChunkMetadata, valueChunkMetadataList); } - public List<AlignedChunkMetadata> getChunkMetadataList() { + public List<AbstractAlignedChunkMetadata> getChunkMetadataList() { List<IChunkMetadata> timeChunkMetadata = timeseriesMetadata.getChunkMetadataList(); List<List<IChunkMetadata>> valueChunkMetadataList = new ArrayList<>(); for (TimeseriesMetadata metadata : valueTimeseriesMetadataList) { @@ -133,9 +133,9 @@ public abstract class AbstractAlignedTimeSeriesMetadata implements ITimeSeriesMe } /** Notice: if all the value chunks is empty chunk, then return empty list. */ - private List<AlignedChunkMetadata> getAlignedChunkMetadata( + private List<AbstractAlignedChunkMetadata> getAlignedChunkMetadata( List<IChunkMetadata> timeChunkMetadata, List<List<IChunkMetadata>> valueChunkMetadataList) { - List<AlignedChunkMetadata> res = new ArrayList<>(); + List<AbstractAlignedChunkMetadata> res = new ArrayList<>(); for (int i = 0; i < timeChunkMetadata.size(); i++) { // only need time column if (valueTimeseriesMetadataList.isEmpty()) { @@ -160,11 +160,14 @@ public abstract class AbstractAlignedTimeSeriesMetadata implements ITimeSeriesMe } abstract void constructAlignedChunkMetadata( - List<AlignedChunkMetadata> res, + List<AbstractAlignedChunkMetadata> res, IChunkMetadata timeChunkMetadata, List<IChunkMetadata> chunkMetadataList, boolean exits); + abstract AbstractAlignedChunkMetadata constructOnlyTimeChunkMetadata( + IChunkMetadata timeChunkMetadata); + @Override public void setChunkMetadataLoader(IChunkMetadataLoader chunkMetadataLoader) { this.chunkMetadataLoader = chunkMetadataLoader; diff --git a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java index c92443be1..81df89ca2 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java @@ -19,30 +19,16 @@ package org.apache.tsfile.file.metadata; -import org.apache.tsfile.enums.TSDataType; import org.apache.tsfile.file.metadata.statistics.Statistics; -import org.apache.tsfile.read.common.TimeRange; -import org.apache.tsfile.read.controller.IChunkLoader; -import java.io.OutputStream; import java.io.Serializable; import java.util.List; -import java.util.Optional; -public class AlignedChunkMetadata implements IChunkMetadata { - - // ChunkMetadata for time column - private final IChunkMetadata timeChunkMetadata; - // ChunkMetadata for all subSensors in the vector - private final List<IChunkMetadata> valueChunkMetadataList; - - /** ChunkLoader of metadata, used to create IChunkReader */ - private IChunkLoader chunkLoader; +public class AlignedChunkMetadata extends AbstractAlignedChunkMetadata { public AlignedChunkMetadata( IChunkMetadata timeChunkMetadata, List<IChunkMetadata> valueChunkMetadataList) { - this.timeChunkMetadata = timeChunkMetadata; - this.valueChunkMetadataList = valueChunkMetadataList; + super(timeChunkMetadata, valueChunkMetadataList); } @Override @@ -52,31 +38,6 @@ public class AlignedChunkMetadata implements IChunkMetadata { : timeChunkMetadata.getStatistics(); } - @Override - public Statistics<? extends Serializable> getTimeStatistics() { - return timeChunkMetadata.getStatistics(); - } - - @Override - public Optional<Statistics<? extends Serializable>> getMeasurementStatistics( - int measurementIndex) { - IChunkMetadata chunkMetadata = valueChunkMetadataList.get(measurementIndex); - return Optional.ofNullable(chunkMetadata == null ? null : chunkMetadata.getStatistics()); - } - - @Override - public boolean hasNullValue(int measurementIndex) { - long rowCount = getTimeStatistics().getCount(); - Optional<Statistics<? extends Serializable>> statistics = - getMeasurementStatistics(measurementIndex); - return statistics.map(stat -> stat.hasNullValue(rowCount)).orElse(true); - } - - @Override - public int getMeasurementCount() { - return valueChunkMetadataList.size(); - } - @Override public boolean timeAllSelected() { for (int index = 0; index < getMeasurementCount(); index++) { @@ -88,127 +49,4 @@ public class AlignedChunkMetadata implements IChunkMetadata { } return false; } - - @Override - public boolean isModified() { - return timeChunkMetadata.isModified(); - } - - @Override - public void setModified(boolean modified) { - timeChunkMetadata.setModified(modified); - for (IChunkMetadata v : valueChunkMetadataList) { - if (v != null) { - v.setModified(modified); - } - } - } - - @Override - public boolean isSeq() { - return timeChunkMetadata.isSeq(); - } - - @Override - public void setSeq(boolean seq) { - timeChunkMetadata.setSeq(seq); - for (IChunkMetadata v : valueChunkMetadataList) { - if (v != null) { - v.setSeq(seq); - } - } - } - - @Override - public long getVersion() { - return timeChunkMetadata.getVersion(); - } - - @Override - public void setVersion(long version) { - timeChunkMetadata.setVersion(version); - for (IChunkMetadata valueChunkMetadata : valueChunkMetadataList) { - if (valueChunkMetadata != null) { - valueChunkMetadata.setVersion(version); - } - } - } - - @Override - public long getOffsetOfChunkHeader() { - return timeChunkMetadata.getOffsetOfChunkHeader(); - } - - @Override - public long getStartTime() { - return timeChunkMetadata.getStartTime(); - } - - @Override - public long getEndTime() { - return timeChunkMetadata.getEndTime(); - } - - @Override - public IChunkLoader getChunkLoader() { - return chunkLoader; - } - - @Override - public boolean needSetChunkLoader() { - return chunkLoader == null; - } - - @Override - public void setChunkLoader(IChunkLoader chunkLoader) { - this.chunkLoader = chunkLoader; - } - - @Override - public void setClosed(boolean closed) { - timeChunkMetadata.setClosed(closed); - for (IChunkMetadata chunkMetadata : valueChunkMetadataList) { - if (chunkMetadata != null) { - chunkMetadata.setClosed(closed); - } - } - } - - @Override - public TSDataType getDataType() { - return timeChunkMetadata.getDataType(); - } - - @Override - public String getMeasurementUid() { - return timeChunkMetadata.getMeasurementUid(); - } - - @Override - public void insertIntoSortedDeletions(TimeRange timeRange) { - throw new UnsupportedOperationException(); - } - - @Override - public List<TimeRange> getDeleteIntervalList() { - throw new UnsupportedOperationException(); - } - - @Override - public int serializeTo(OutputStream outputStream, boolean serializeStatistic) { - throw new UnsupportedOperationException("VectorChunkMetadata doesn't support serial method"); - } - - @Override - public byte getMask() { - return 0; - } - - public IChunkMetadata getTimeChunkMetadata() { - return timeChunkMetadata; - } - - public List<IChunkMetadata> getValueChunkMetadataList() { - return valueChunkMetadataList; - } } diff --git a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedTimeSeriesMetadata.java b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedTimeSeriesMetadata.java index ba5cbce41..7e1e5bf08 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedTimeSeriesMetadata.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedTimeSeriesMetadata.java @@ -21,6 +21,7 @@ package org.apache.tsfile.file.metadata; import org.apache.tsfile.file.metadata.statistics.Statistics; +import java.util.Collections; import java.util.List; public class AlignedTimeSeriesMetadata extends AbstractAlignedTimeSeriesMetadata { @@ -55,7 +56,7 @@ public class AlignedTimeSeriesMetadata extends AbstractAlignedTimeSeriesMetadata @Override void constructAlignedChunkMetadata( - List<AlignedChunkMetadata> res, + List<AbstractAlignedChunkMetadata> res, IChunkMetadata timeChunkMetadata, List<IChunkMetadata> chunkMetadataList, boolean exits) { @@ -63,4 +64,9 @@ public class AlignedTimeSeriesMetadata extends AbstractAlignedTimeSeriesMetadata res.add(new AlignedChunkMetadata(timeChunkMetadata, chunkMetadataList)); } } + + @Override + AbstractAlignedChunkMetadata constructOnlyTimeChunkMetadata(IChunkMetadata timeChunkMetadata) { + return new AlignedChunkMetadata(timeChunkMetadata, Collections.emptyList()); + } } diff --git a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceMetadata.java b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceChunkMetadata.java similarity index 54% copy from java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceMetadata.java copy to java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceChunkMetadata.java index 8614a5326..8daeffc5d 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceMetadata.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceChunkMetadata.java @@ -21,30 +21,18 @@ package org.apache.tsfile.file.metadata; import org.apache.tsfile.file.metadata.statistics.Statistics; +import java.io.Serializable; import java.util.List; -public class TableDeviceMetadata extends AbstractAlignedTimeSeriesMetadata { +public class TableDeviceChunkMetadata extends AbstractAlignedChunkMetadata { - public TableDeviceMetadata( - TimeseriesMetadata timeseriesMetadata, List<TimeseriesMetadata> valueTimeseriesMetadataList) { - super(timeseriesMetadata, valueTimeseriesMetadataList); + public TableDeviceChunkMetadata( + IChunkMetadata timeChunkMetadata, List<IChunkMetadata> valueChunkMetadataList) { + super(timeChunkMetadata, valueChunkMetadataList); } - /** - * If the vector contains only one sub sensor, just return the sub sensor's Statistics Otherwise, - * return the Statistics of the time column. - */ @Override - public Statistics getStatistics() { - return timeseriesMetadata.getStatistics(); - } - - @Override - void constructAlignedChunkMetadata( - List<AlignedChunkMetadata> res, - IChunkMetadata timeChunkMetadata, - List<IChunkMetadata> chunkMetadataList, - boolean exits) { - res.add(new AlignedChunkMetadata(timeChunkMetadata, chunkMetadataList)); + public Statistics<? extends Serializable> getStatistics() { + return timeChunkMetadata.getStatistics(); } } diff --git a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceMetadata.java b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceTimeSeriesMetadata.java similarity index 76% rename from java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceMetadata.java rename to java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceTimeSeriesMetadata.java index 8614a5326..debacf5ba 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceMetadata.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceTimeSeriesMetadata.java @@ -21,11 +21,12 @@ package org.apache.tsfile.file.metadata; import org.apache.tsfile.file.metadata.statistics.Statistics; +import java.util.Collections; import java.util.List; -public class TableDeviceMetadata extends AbstractAlignedTimeSeriesMetadata { +public class TableDeviceTimeSeriesMetadata extends AbstractAlignedTimeSeriesMetadata { - public TableDeviceMetadata( + public TableDeviceTimeSeriesMetadata( TimeseriesMetadata timeseriesMetadata, List<TimeseriesMetadata> valueTimeseriesMetadataList) { super(timeseriesMetadata, valueTimeseriesMetadataList); } @@ -41,10 +42,15 @@ public class TableDeviceMetadata extends AbstractAlignedTimeSeriesMetadata { @Override void constructAlignedChunkMetadata( - List<AlignedChunkMetadata> res, + List<AbstractAlignedChunkMetadata> res, IChunkMetadata timeChunkMetadata, List<IChunkMetadata> chunkMetadataList, boolean exits) { - res.add(new AlignedChunkMetadata(timeChunkMetadata, chunkMetadataList)); + res.add(new TableDeviceChunkMetadata(timeChunkMetadata, chunkMetadataList)); + } + + @Override + AbstractAlignedChunkMetadata constructOnlyTimeChunkMetadata(IChunkMetadata timeChunkMetadata) { + return new TableDeviceChunkMetadata(timeChunkMetadata, Collections.emptyList()); } } diff --git a/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java b/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java index 3f7a171b4..3961053bd 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java @@ -52,7 +52,7 @@ import org.apache.tsfile.file.metadata.IDeviceID; import org.apache.tsfile.file.metadata.ITimeSeriesMetadata; import org.apache.tsfile.file.metadata.MeasurementMetadataIndexEntry; import org.apache.tsfile.file.metadata.MetadataIndexNode; -import org.apache.tsfile.file.metadata.TableDeviceMetadata; +import org.apache.tsfile.file.metadata.TableDeviceTimeSeriesMetadata; import org.apache.tsfile.file.metadata.TableSchema; import org.apache.tsfile.file.metadata.TimeseriesMetadata; import org.apache.tsfile.file.metadata.TsFileMetadata; @@ -916,7 +916,7 @@ public class TsFileSequenceReader implements AutoCloseable { if (valueTimeseriesMetadataList != null && !valueTimeseriesMetadataList.isEmpty()) { if (this.tsFileMetaData.getTableSchemaMap().containsKey(device.getTableName())) { resultTimeseriesMetadataList.add( - new TableDeviceMetadata(timeColumnMetadata, valueTimeseriesMetadataList)); + new TableDeviceTimeSeriesMetadata(timeColumnMetadata, valueTimeseriesMetadataList)); } else { resultTimeseriesMetadataList.add( new AlignedTimeSeriesMetadata(timeColumnMetadata, valueTimeseriesMetadataList)); @@ -2670,7 +2670,7 @@ public class TsFileSequenceReader implements AutoCloseable { new AlignedTimeSeriesMetadata(timeseriesMetadata, valueTimeseriesMetadataList); } else { alignedTimeSeriesMetadata = - new TableDeviceMetadata(timeseriesMetadata, valueTimeseriesMetadataList); + new TableDeviceTimeSeriesMetadata(timeseriesMetadata, valueTimeseriesMetadataList); } List<AlignedChunkMetadata> chunkMetadataList = new ArrayList<>(); for (IChunkMetadata chunkMetadata : readIChunkMetaDataList(alignedTimeSeriesMetadata)) {
