@Internal public final class BinaryRowData extends BinarySection implements RowData, TypedSetters, NullAwareGetters
RowData which is backed by MemorySegment instead of Object.
It can significantly reduce the serialization/deserialization of Java objects.
A Row has two part: Fixed-length part and variable-length part.
Fixed-length part contains 1 byte header and null bit set and field values. Null bit set is used for null tracking and is aligned to 8-byte word boundaries. `Field values` holds fixed-length primitive types and variable-length values which can be stored in 8 bytes inside. If it do not fit the variable-length field, then store the length and offset of variable-length part.
Fixed-length part will certainly fall into a MemorySegment, which will speed up the read and write of field. During the write phase, if the target memory segment has less space than fixed length part size, we will skip the space. So the number of fields in a single Row cannot exceed the capacity of a single MemorySegment, if there are too many fields, we suggest that user set a bigger pageSize of MemorySegment.
Variable-length part may fall into multiple MemorySegments.
RowData.FieldGetter| Modifier and Type | Field and Description |
|---|---|
static int |
HEADER_SIZE_IN_BITS |
static boolean |
LITTLE_ENDIAN |
offset, segments, sizeInBytesHIGHEST_FIRST_BIT, HIGHEST_SECOND_TO_EIGHTH_BIT, MAX_FIX_PART_DATA_SIZE| Constructor and Description |
|---|
BinaryRowData(int arity) |
| Modifier and Type | Method and Description |
|---|---|
boolean |
anyNull()
The bit is 1 when the field is null.
|
boolean |
anyNull(int[] fields)
For the input fields, if no field is null, return false.
|
static int |
calculateBitSetWidthInBytes(int arity) |
static int |
calculateFixPartSizeInBytes(int arity) |
void |
clear() |
BinaryRowData |
copy() |
BinaryRowData |
copy(BinaryRowData reuse) |
boolean |
equals(Object o) |
int |
getArity()
Returns the number of fields in this row.
|
ArrayData |
getArray(int pos)
Returns the array value at the given position.
|
byte[] |
getBinary(int pos)
Returns the binary value at the given position.
|
boolean |
getBoolean(int pos)
Returns the boolean value at the given position.
|
byte |
getByte(int pos)
Returns the byte value at the given position.
|
DecimalData |
getDecimal(int pos,
int precision,
int scale)
Returns the decimal value at the given position.
|
double |
getDouble(int pos)
Returns the double value at the given position.
|
int |
getFixedLengthPartSize() |
float |
getFloat(int pos)
Returns the float value at the given position.
|
int |
getInt(int pos)
Returns the integer value at the given position.
|
long |
getLong(int pos)
Returns the long value at the given position.
|
MapData |
getMap(int pos)
Returns the map value at the given position.
|
<T> RawValueData<T> |
getRawValue(int pos)
Returns the raw value at the given position.
|
RowData |
getRow(int pos,
int numFields)
Returns the row value at the given position.
|
org.apache.flink.types.RowKind |
getRowKind()
Returns the kind of change that this row describes in a changelog.
|
short |
getShort(int pos)
Returns the short value at the given position.
|
StringData |
getString(int pos)
Returns the string value at the given position.
|
TimestampData |
getTimestamp(int pos,
int precision)
Returns the timestamp value at the given position.
|
int |
hashCode() |
static boolean |
isInFixedLengthPart(LogicalType type)
If it is a fixed-length field, we can call this BinaryRowData's setXX method for in-place
updates.
|
static boolean |
isMutable(LogicalType type) |
boolean |
isNullAt(int pos)
Returns true if the field is null at the given position.
|
void |
setBoolean(int pos,
boolean value) |
void |
setByte(int pos,
byte value) |
void |
setDecimal(int pos,
DecimalData value,
int precision)
Set the decimal column value.
|
void |
setDouble(int pos,
double value) |
void |
setFloat(int pos,
float value) |
void |
setInt(int pos,
int value) |
void |
setLong(int pos,
long value) |
void |
setNullAt(int i) |
void |
setRowKind(org.apache.flink.types.RowKind kind)
Sets the kind of change that this row describes in a changelog.
|
void |
setShort(int pos,
short value) |
void |
setTimestamp(int pos,
TimestampData value,
int precision)
Set Timestamp value.
|
void |
setTotalSize(int sizeInBytes) |
getOffset, getSegments, getSizeInBytes, pointTo, pointToclone, finalize, getClass, notify, notifyAll, toString, wait, wait, waitcreateFieldGetterpublic static final boolean LITTLE_ENDIAN
public static final int HEADER_SIZE_IN_BITS
public static int calculateBitSetWidthInBytes(int arity)
public static int calculateFixPartSizeInBytes(int arity)
public static boolean isInFixedLengthPart(LogicalType type)
public static boolean isMutable(LogicalType type)
public int getFixedLengthPartSize()
public int getArity()
RowDataThe number does not include RowKind. It is kept separately.
public org.apache.flink.types.RowKind getRowKind()
RowDatagetRowKind in interface RowDataRowKindpublic void setRowKind(org.apache.flink.types.RowKind kind)
RowDatasetRowKind in interface RowDataRowKindpublic void setTotalSize(int sizeInBytes)
public boolean isNullAt(int pos)
RowDatapublic void setNullAt(int i)
setNullAt in interface TypedSetterspublic void setInt(int pos,
int value)
setInt in interface TypedSetterspublic void setLong(int pos,
long value)
setLong in interface TypedSetterspublic void setDouble(int pos,
double value)
setDouble in interface TypedSetterspublic void setDecimal(int pos,
DecimalData value,
int precision)
TypedSettersNote: Precision is compact: can call TypedSetters.setNullAt(int) when decimal is null. Precision is
not compact: can not call TypedSetters.setNullAt(int) when decimal is null, must call setDecimal(pos, null, precision) because we need update var-length-part.
setDecimal in interface TypedSetterspublic void setTimestamp(int pos,
TimestampData value,
int precision)
TypedSettersNote: If precision is compact: can call TypedSetters.setNullAt(int) when TimestampData value is
null. Otherwise: can not call TypedSetters.setNullAt(int) when TimestampData value is null, must call
setTimestamp(pos, null, precision) because we need to update var-length-part.
setTimestamp in interface TypedSetterspublic void setBoolean(int pos,
boolean value)
setBoolean in interface TypedSetterspublic void setShort(int pos,
short value)
setShort in interface TypedSetterspublic void setByte(int pos,
byte value)
setByte in interface TypedSetterspublic void setFloat(int pos,
float value)
setFloat in interface TypedSetterspublic boolean getBoolean(int pos)
RowDatagetBoolean in interface RowDatapublic byte getByte(int pos)
RowDatapublic short getShort(int pos)
RowDatapublic int getInt(int pos)
RowDatapublic long getLong(int pos)
RowDatapublic float getFloat(int pos)
RowDatapublic double getDouble(int pos)
RowDatapublic StringData getString(int pos)
RowDatapublic DecimalData getDecimal(int pos, int precision, int scale)
RowDataThe precision and scale are required to determine whether the decimal value was stored in
a compact representation (see DecimalData).
getDecimal in interface RowDatapublic TimestampData getTimestamp(int pos, int precision)
RowDataThe precision is required to determine whether the timestamp value was stored in a compact
representation (see TimestampData).
getTimestamp in interface RowDatapublic <T> RawValueData<T> getRawValue(int pos)
RowDatagetRawValue in interface RowDatapublic byte[] getBinary(int pos)
RowDatapublic ArrayData getArray(int pos)
RowDatapublic MapData getMap(int pos)
RowDatapublic RowData getRow(int pos, int numFields)
RowDataThe number of fields is required to correctly extract the row.
public boolean anyNull()
anyNull in interface NullAwareGetterspublic boolean anyNull(int[] fields)
NullAwareGettersanyNull in interface NullAwareGetterspublic BinaryRowData copy()
public BinaryRowData copy(BinaryRowData reuse)
public void clear()
public boolean equals(Object o)
equals in class BinarySectionpublic int hashCode()
hashCode in class BinarySectionCopyright © 2014–2025 The Apache Software Foundation. All rights reserved.