@Internal public final class RowSerializer extends TypeSerializer<Row>
Row
.
It uses the following serialization format:
|bitmask|field|field|....The bitmask serves as a header that consists of
ROW_KIND_OFFSET
bits for encoding the
RowKind
and n bits for whether a field is null. For backwards compatibility, those bits
can be ignored if serializer runs in legacy mode:
bitmask with row kind: |RK RK F1 F2 ... FN| bitmask in legacy mode: |F1 F2 ... FN|
Field names are an optional part of this serializer. They allow to use rows in named-based
field mode. However, the support for name-based rows is limited. Usually, name-based mode should
not be used in state but only for in-flight data. For now, names are not part of serializer
snapshot or equals/hashCode (similar to RowTypeInfo
).
Modifier and Type | Class and Description |
---|---|
static class |
RowSerializer.RowSerializerSnapshot
A
TypeSerializerSnapshot for RowSerializer. |
Modifier and Type | Field and Description |
---|---|
static int |
ROW_KIND_OFFSET |
Constructor and Description |
---|
RowSerializer(TypeSerializer<?>[] fieldSerializers) |
RowSerializer(TypeSerializer<?>[] fieldSerializers,
LinkedHashMap<String,Integer> positionByName) |
RowSerializer(TypeSerializer<?>[] fieldSerializers,
LinkedHashMap<String,Integer> positionByName,
boolean supportsRowKind) |
Modifier and Type | Method and Description |
---|---|
void |
copy(DataInputView source,
DataOutputView target)
Copies exactly one record from the source input view to the target output view.
|
Row |
copy(Row from)
Creates a deep copy of the given element in a new element.
|
Row |
copy(Row from,
Row reuse)
Creates a copy from the given element.
|
Row |
createInstance()
Creates a new instance of the data type.
|
Row |
deserialize(DataInputView source)
De-serializes a record from the given source input view.
|
Row |
deserialize(Row reuse,
DataInputView source)
De-serializes a record from the given source input view into the given reuse record instance
if mutable.
|
TypeSerializer<Row> |
duplicate()
Creates a deep copy of this serializer if it is necessary, i.e. if it is stateful.
|
boolean |
equals(Object o) |
int |
getArity() |
int |
getLength()
Gets the length of the data type, if it is a fix length data type.
|
int |
hashCode() |
boolean |
isImmutableType()
Gets whether the type is an immutable type.
|
void |
serialize(Row record,
DataOutputView target)
Serializes the given record to the given target output view.
|
TypeSerializerSnapshot<Row> |
snapshotConfiguration()
Snapshots the configuration of this TypeSerializer.
|
public static final int ROW_KIND_OFFSET
public RowSerializer(TypeSerializer<?>[] fieldSerializers)
public RowSerializer(TypeSerializer<?>[] fieldSerializers, @Nullable LinkedHashMap<String,Integer> positionByName)
public RowSerializer(TypeSerializer<?>[] fieldSerializers, @Nullable LinkedHashMap<String,Integer> positionByName, boolean supportsRowKind)
public boolean isImmutableType()
TypeSerializer
isImmutableType
in class TypeSerializer<Row>
public TypeSerializer<Row> duplicate()
TypeSerializer
We need this because Serializers might be used in several threads. Stateless serializers are inherently thread-safe while stateful serializers might not be thread-safe.
duplicate
in class TypeSerializer<Row>
public Row createInstance()
TypeSerializer
createInstance
in class TypeSerializer<Row>
public Row copy(Row from)
TypeSerializer
copy
in class TypeSerializer<Row>
from
- The element reuse be copied.public Row copy(Row from, Row reuse)
TypeSerializer
copy
in class TypeSerializer<Row>
from
- The element to be copied.reuse
- The element to be reused. May or may not be used.public int getLength()
TypeSerializer
getLength
in class TypeSerializer<Row>
-1
for variable length data types.public int getArity()
public void serialize(Row record, DataOutputView target) throws IOException
TypeSerializer
serialize
in class TypeSerializer<Row>
record
- The record to serialize.target
- The output view to write the serialized data to.IOException
- Thrown, if the serialization encountered an I/O related error. Typically
raised by the output view, which may have an underlying I/O channel to which it
delegates.public Row deserialize(DataInputView source) throws IOException
TypeSerializer
deserialize
in class TypeSerializer<Row>
source
- The input view from which to read the data.IOException
- Thrown, if the de-serialization encountered an I/O related error.
Typically raised by the input view, which may have an underlying I/O channel from which
it reads.public Row deserialize(Row reuse, DataInputView source) throws IOException
TypeSerializer
deserialize
in class TypeSerializer<Row>
reuse
- The record instance into which to de-serialize the data.source
- The input view from which to read the data.IOException
- Thrown, if the de-serialization encountered an I/O related error.
Typically raised by the input view, which may have an underlying I/O channel from which
it reads.public void copy(DataInputView source, DataOutputView target) throws IOException
TypeSerializer
target.write(source, 8);
.copy
in class TypeSerializer<Row>
source
- The input view from which to read the record.target
- The target output view to which to write the record.IOException
- Thrown if any of the two views raises an exception.public boolean equals(Object o)
equals
in class TypeSerializer<Row>
public int hashCode()
hashCode
in class TypeSerializer<Row>
public TypeSerializerSnapshot<Row> snapshotConfiguration()
TypeSerializer
The snapshot of the TypeSerializer is supposed to contain all information that affects the serialization format of the serializer. The snapshot serves two purposes: First, to reproduce the serializer when the checkpoint/savepoint is restored, and second, to check whether the serialization format is compatible with the serializer used in the restored program.
IMPORTANT: TypeSerializerSnapshots changed after Flink 1.6. Serializers implemented against Flink versions up to 1.6 should still work, but adjust to new model to enable state evolution and be future-proof. See the class-level comments, section "Upgrading TypeSerializers to the new TypeSerializerSnapshot model" for details.
snapshotConfiguration
in class TypeSerializer<Row>
null
).TypeSerializerSnapshot.resolveSchemaCompatibility(TypeSerializerSnapshot)
Copyright © 2014–2024 The Apache Software Foundation. All rights reserved.