Package org.apache.druid.segment.data
Class GenericIndexedWriter<T>
java.lang.Object
org.apache.druid.segment.data.GenericIndexedWriter<T>
- All Implemented Interfaces:
DictionaryWriter<T>,Serializer
Streams arrays of objects out in the binary format described by
GenericIndexed
The version EncodedStringDictionaryWriter.VERSION is reserved and must never be specified as the
GenericIndexed version byte, else it will interfere with string column deserialization.-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionGenericIndexedWriter(SegmentWriteOutMedium segmentWriteOutMedium, String filenameBase, ObjectStrategy<T> strategy) GenericIndexedWriter(SegmentWriteOutMedium segmentWriteOutMedium, String filenameBase, ObjectStrategy<T> strategy, int fileSizeLimit) -
Method Summary
Modifier and TypeMethodDescriptionstatic ObjectStrategy<ByteBuffer>compressedByteBuffersWriteObjectStrategy(CompressionStrategy compressionStrategy, int bufferSize, Closer closer) static StringgenerateHeaderFileName(String fileNameBase) static StringgenerateValueFileName(String fileNameBase, int fileNum) get(int index) Returns an object that has already been written via theDictionaryWriter.write(T)method.intReturns the number of items that have been written so far in this dictionary.longReturns the number of bytes, that this Serializer will write to the output _channel_ (not smoosher) on aSerializer.writeTo(java.nio.channels.WritableByteChannel, org.apache.druid.segment.file.SegmentFileBuilder)call.booleanisSorted()static GenericIndexedWriter<ByteBuffer>ofCompressedByteBuffers(SegmentWriteOutMedium segmentWriteOutMedium, String filenameBase, CompressionStrategy compressionStrategy, int bufferSize, int fileSizeLimit, Closer closer) Creates a new writer that accepts byte buffers and compresses them.voidopen()Prepares the writer for writingvoidintWrites an object to the dictionary.voidwriteTo(WritableByteChannel channel, SegmentFileBuilder fileBuilder) Writes the serialized form of this object.
-
Field Details
-
MAX_FILE_SIZE
public static final int MAX_FILE_SIZE- See Also:
-
-
Constructor Details
-
GenericIndexedWriter
public GenericIndexedWriter(SegmentWriteOutMedium segmentWriteOutMedium, String filenameBase, ObjectStrategy<T> strategy) -
GenericIndexedWriter
public GenericIndexedWriter(SegmentWriteOutMedium segmentWriteOutMedium, String filenameBase, ObjectStrategy<T> strategy, int fileSizeLimit)
-
-
Method Details
-
ofCompressedByteBuffers
public static GenericIndexedWriter<ByteBuffer> ofCompressedByteBuffers(SegmentWriteOutMedium segmentWriteOutMedium, String filenameBase, CompressionStrategy compressionStrategy, int bufferSize, int fileSizeLimit, Closer closer) Creates a new writer that accepts byte buffers and compresses them.- Parameters:
segmentWriteOutMedium- supplier of temporary filesfilenameBase- base filename to be used for secondary files, if multiple files are neededcompressionStrategy- compression strategy to applybufferSize- size of the buffers that will be passed infileSizeLimit- limit for files created by the writer. In production code, this should always beMAX_FILE_SIZE. The parameter is exposed only for testing.closer- closer to attach temporary compression buffers to
-
compressedByteBuffersWriteObjectStrategy
public static ObjectStrategy<ByteBuffer> compressedByteBuffersWriteObjectStrategy(CompressionStrategy compressionStrategy, int bufferSize, Closer closer) -
generateValueFileName
-
generateHeaderFileName
-
open
Description copied from interface:DictionaryWriterPrepares the writer for writing- Specified by:
openin interfaceDictionaryWriter<T>- Throws:
IOException- if there is a problem with IO
-
setObjectsNotSorted
public void setObjectsNotSorted() -
isSorted
public boolean isSorted()- Specified by:
isSortedin interfaceDictionaryWriter<T>
-
write
Description copied from interface:DictionaryWriterWrites an object to the dictionary.Returns the index of the value that was just written. This is defined as the `int` value that can be passed into
DictionaryWriter.get(int)such that it will return the same value back.- Specified by:
writein interfaceDictionaryWriter<T>- Parameters:
objectToWrite- object to be written to the dictionary- Returns:
- index of the value that was just written
- Throws:
IOException- if there is a problem with IO
-
get
Description copied from interface:DictionaryWriterReturns an object that has already been written via theDictionaryWriter.write(T)method.- Specified by:
getin interfaceDictionaryWriter<T>- Parameters:
index- index of the object to return- Returns:
- the object identified by the given index
- Throws:
IOException- if there is a problem with IO
-
getCardinality
public int getCardinality()Description copied from interface:DictionaryWriterReturns the number of items that have been written so far in this dictionary. Any number lower than this cardinality can be passed intoDictionaryWriter.get(int)and a value will be returned. If a value greater than or equal to the cardinality is passed intoDictionaryWriter.get(int)all sorts of things could happen, but likely none of them are good.- Specified by:
getCardinalityin interfaceDictionaryWriter<T>- Returns:
- the number of items that have been written so far
-
getSerializedSize
public long getSerializedSize()Description copied from interface:SerializerReturns the number of bytes, that this Serializer will write to the output _channel_ (not smoosher) on aSerializer.writeTo(java.nio.channels.WritableByteChannel, org.apache.druid.segment.file.SegmentFileBuilder)call.- Specified by:
getSerializedSizein interfaceSerializer
-
writeTo
public void writeTo(WritableByteChannel channel, @Nullable SegmentFileBuilder fileBuilder) throws IOException Description copied from interface:SerializerWrites the serialized form of this object. The entire object may be written to the provided channel, or the object may be split over the provided channel and files added to the {@link SegmentFileBuilder], where additional channels can be created viaSegmentFileBuilder.addWithChannel(String, long). The latter approach is useful when the serialized form of the object is too large for a single smoosh container. At the time this javadoc was written, the max smoosh container size is limit to the maxByteBuffersize.- Specified by:
writeToin interfaceSerializer- Throws:
IOException
-