org.dinky.shaded.paimon.io.RowDataFileWriter Maven / Gradle / Ivy
The newest version!
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.dinky.shaded.paimon.io;
import org.dinky.shaded.paimon.data.InternalRow;
import org.dinky.shaded.paimon.format.FormatWriterFactory;
import org.dinky.shaded.paimon.format.TableStatsExtractor;
import org.dinky.shaded.paimon.fs.FileIO;
import org.dinky.shaded.paimon.fs.Path;
import org.dinky.shaded.paimon.statistics.FieldStatsCollector;
import org.dinky.shaded.paimon.stats.BinaryTableStats;
import org.dinky.shaded.paimon.stats.FieldStatsArraySerializer;
import org.dinky.shaded.paimon.types.RowType;
import org.dinky.shaded.paimon.utils.LongCounter;
import javax.annotation.Nullable;
import java.io.IOException;
import java.util.function.Function;
/**
* A {@link StatsCollectingSingleFileWriter} to write data files containing {@link InternalRow}.
* Also produces {@link DataFileMeta} after writing a file.
*/
public class RowDataFileWriter extends StatsCollectingSingleFileWriter {
private final long schemaId;
private final LongCounter seqNumCounter;
private final FieldStatsArraySerializer statsArraySerializer;
public RowDataFileWriter(
FileIO fileIO,
FormatWriterFactory factory,
Path path,
RowType writeSchema,
@Nullable TableStatsExtractor tableStatsExtractor,
long schemaId,
LongCounter seqNumCounter,
String fileCompression,
FieldStatsCollector.Factory[] statsCollectors) {
super(
fileIO,
factory,
path,
Function.identity(),
writeSchema,
tableStatsExtractor,
fileCompression,
statsCollectors);
this.schemaId = schemaId;
this.seqNumCounter = seqNumCounter;
this.statsArraySerializer = new FieldStatsArraySerializer(writeSchema);
}
@Override
public void write(InternalRow row) throws IOException {
super.write(row);
seqNumCounter.add(1L);
}
@Override
public DataFileMeta result() throws IOException {
BinaryTableStats stats = statsArraySerializer.toBinary(fieldStats());
return DataFileMeta.forAppend(
path.getName(),
fileIO.getFileSize(path),
recordCount(),
stats,
seqNumCounter.getValue() - super.recordCount(),
seqNumCounter.getValue() - 1,
schemaId);
}
}