Class BinaryRowData
- java.lang.Object
-
- org.apache.flink.table.data.binary.BinarySection
-
- org.apache.flink.table.data.binary.BinaryRowData
-
- All Implemented Interfaces:
BinaryFormat,NullAwareGetters,TypedSetters,RowData
@Internal public final class BinaryRowData extends BinarySection implements RowData, TypedSetters, NullAwareGetters
An implementation ofRowDatawhich is backed byMemorySegmentinstead 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.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.flink.table.data.RowData
RowData.FieldGetter
-
-
Field Summary
Fields Modifier and Type Field Description static intHEADER_SIZE_IN_BITSstatic booleanLITTLE_ENDIAN-
Fields inherited from class org.apache.flink.table.data.binary.BinarySection
offset, segments, sizeInBytes
-
Fields inherited from interface org.apache.flink.table.data.binary.BinaryFormat
HIGHEST_FIRST_BIT, HIGHEST_SECOND_TO_EIGHTH_BIT, MAX_FIX_PART_DATA_SIZE
-
-
Constructor Summary
Constructors Constructor Description BinaryRowData(int arity)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description booleananyNull()The bit is 1 when the field is null.booleananyNull(int[] fields)For the input fields, if no field is null, return false.static intcalculateBitSetWidthInBytes(int arity)static intcalculateFixPartSizeInBytes(int arity)voidclear()BinaryRowDatacopy()BinaryRowDatacopy(BinaryRowData reuse)booleanequals(Object o)intgetArity()Returns the number of fields in this row.ArrayDatagetArray(int pos)Returns the array value at the given position.byte[]getBinary(int pos)Returns the binary value at the given position.booleangetBoolean(int pos)Returns the boolean value at the given position.bytegetByte(int pos)Returns the byte value at the given position.DecimalDatagetDecimal(int pos, int precision, int scale)Returns the decimal value at the given position.doublegetDouble(int pos)Returns the double value at the given position.intgetFixedLengthPartSize()floatgetFloat(int pos)Returns the float value at the given position.intgetInt(int pos)Returns the integer value at the given position.longgetLong(int pos)Returns the long value at the given position.MapDatagetMap(int pos)Returns the map value at the given position.<T> RawValueData<T>getRawValue(int pos)Returns the raw value at the given position.RowDatagetRow(int pos, int numFields)Returns the row value at the given position.org.apache.flink.types.RowKindgetRowKind()Returns the kind of change that this row describes in a changelog.shortgetShort(int pos)Returns the short value at the given position.StringDatagetString(int pos)Returns the string value at the given position.TimestampDatagetTimestamp(int pos, int precision)Returns the timestamp value at the given position.org.apache.flink.types.variant.BinaryVariantgetVariant(int pos)Returns the variant value at the given position.inthashCode()static booleanisInFixedLengthPart(LogicalType type)If it is a fixed-length field, we can call this BinaryRowData's setXX method for in-place updates.static booleanisMutable(LogicalType type)booleanisNullAt(int pos)Returns true if the field is null at the given position.voidsetBoolean(int pos, boolean value)voidsetByte(int pos, byte value)voidsetDecimal(int pos, DecimalData value, int precision)Set the decimal column value.voidsetDouble(int pos, double value)voidsetFloat(int pos, float value)voidsetInt(int pos, int value)voidsetLong(int pos, long value)voidsetNullAt(int i)voidsetRowKind(org.apache.flink.types.RowKind kind)Sets the kind of change that this row describes in a changelog.voidsetShort(int pos, short value)voidsetTimestamp(int pos, TimestampData value, int precision)Set Timestamp value.voidsetTotalSize(int sizeInBytes)-
Methods inherited from class org.apache.flink.table.data.binary.BinarySection
getOffset, getSegments, getSizeInBytes, pointTo, pointTo
-
-
-
-
Field Detail
-
LITTLE_ENDIAN
public static final boolean LITTLE_ENDIAN
-
HEADER_SIZE_IN_BITS
public static final int HEADER_SIZE_IN_BITS
- See Also:
- Constant Field Values
-
-
Method Detail
-
calculateBitSetWidthInBytes
public static int calculateBitSetWidthInBytes(int arity)
-
calculateFixPartSizeInBytes
public static int calculateFixPartSizeInBytes(int arity)
-
isInFixedLengthPart
public static boolean isInFixedLengthPart(LogicalType type)
If it is a fixed-length field, we can call this BinaryRowData's setXX method for in-place updates. If it is variable-length field, can't use this method, because the underlying data is stored continuously.
-
isMutable
public static boolean isMutable(LogicalType type)
-
getFixedLengthPartSize
public int getFixedLengthPartSize()
-
getArity
public int getArity()
Description copied from interface:RowDataReturns the number of fields in this row.The number does not include
RowKind. It is kept separately.
-
getRowKind
public org.apache.flink.types.RowKind getRowKind()
Description copied from interface:RowDataReturns the kind of change that this row describes in a changelog.- Specified by:
getRowKindin interfaceRowData- See Also:
RowKind
-
setRowKind
public void setRowKind(org.apache.flink.types.RowKind kind)
Description copied from interface:RowDataSets the kind of change that this row describes in a changelog.- Specified by:
setRowKindin interfaceRowData- See Also:
RowKind
-
setTotalSize
public void setTotalSize(int sizeInBytes)
-
isNullAt
public boolean isNullAt(int pos)
Description copied from interface:RowDataReturns true if the field is null at the given position.
-
setNullAt
public void setNullAt(int i)
- Specified by:
setNullAtin interfaceTypedSetters
-
setInt
public void setInt(int pos, int value)- Specified by:
setIntin interfaceTypedSetters
-
setLong
public void setLong(int pos, long value)- Specified by:
setLongin interfaceTypedSetters
-
setDouble
public void setDouble(int pos, double value)- Specified by:
setDoublein interfaceTypedSetters
-
setDecimal
public void setDecimal(int pos, DecimalData value, int precision)Description copied from interface:TypedSettersSet the decimal column value.Note: Precision is compact: can call
TypedSetters.setNullAt(int)when decimal is null. Precision is not compact: can not callTypedSetters.setNullAt(int)when decimal is null, must callsetDecimal(pos, null, precision)because we need update var-length-part.- Specified by:
setDecimalin interfaceTypedSetters
-
setTimestamp
public void setTimestamp(int pos, TimestampData value, int precision)Description copied from interface:TypedSettersSet Timestamp value.Note: If precision is compact: can call
TypedSetters.setNullAt(int)when TimestampData value is null. Otherwise: can not callTypedSetters.setNullAt(int)when TimestampData value is null, must callsetTimestamp(pos, null, precision)because we need to update var-length-part.- Specified by:
setTimestampin interfaceTypedSetters
-
setBoolean
public void setBoolean(int pos, boolean value)- Specified by:
setBooleanin interfaceTypedSetters
-
setShort
public void setShort(int pos, short value)- Specified by:
setShortin interfaceTypedSetters
-
setByte
public void setByte(int pos, byte value)- Specified by:
setBytein interfaceTypedSetters
-
setFloat
public void setFloat(int pos, float value)- Specified by:
setFloatin interfaceTypedSetters
-
getBoolean
public boolean getBoolean(int pos)
Description copied from interface:RowDataReturns the boolean value at the given position.- Specified by:
getBooleanin interfaceRowData
-
getByte
public byte getByte(int pos)
Description copied from interface:RowDataReturns the byte value at the given position.
-
getShort
public short getShort(int pos)
Description copied from interface:RowDataReturns the short value at the given position.
-
getInt
public int getInt(int pos)
Description copied from interface:RowDataReturns the integer value at the given position.
-
getLong
public long getLong(int pos)
Description copied from interface:RowDataReturns the long value at the given position.
-
getFloat
public float getFloat(int pos)
Description copied from interface:RowDataReturns the float value at the given position.
-
getDouble
public double getDouble(int pos)
Description copied from interface:RowDataReturns the double value at the given position.
-
getString
public StringData getString(int pos)
Description copied from interface:RowDataReturns the string value at the given position.
-
getDecimal
public DecimalData getDecimal(int pos, int precision, int scale)
Description copied from interface:RowDataReturns the decimal value at the given position.The precision and scale are required to determine whether the decimal value was stored in a compact representation (see
DecimalData).- Specified by:
getDecimalin interfaceRowData
-
getTimestamp
public TimestampData getTimestamp(int pos, int precision)
Description copied from interface:RowDataReturns the timestamp value at the given position.The precision is required to determine whether the timestamp value was stored in a compact representation (see
TimestampData).- Specified by:
getTimestampin interfaceRowData
-
getRawValue
public <T> RawValueData<T> getRawValue(int pos)
Description copied from interface:RowDataReturns the raw value at the given position.- Specified by:
getRawValuein interfaceRowData
-
getBinary
public byte[] getBinary(int pos)
Description copied from interface:RowDataReturns the binary value at the given position.
-
getArray
public ArrayData getArray(int pos)
Description copied from interface:RowDataReturns the array value at the given position.
-
getMap
public MapData getMap(int pos)
Description copied from interface:RowDataReturns the map value at the given position.
-
getRow
public RowData getRow(int pos, int numFields)
Description copied from interface:RowDataReturns the row value at the given position.The number of fields is required to correctly extract the row.
-
getVariant
public org.apache.flink.types.variant.BinaryVariant getVariant(int pos)
Description copied from interface:RowDataReturns the variant value at the given position.- Specified by:
getVariantin interfaceRowData
-
anyNull
public boolean anyNull()
The bit is 1 when the field is null. Default is 0.- Specified by:
anyNullin interfaceNullAwareGetters
-
anyNull
public boolean anyNull(int[] fields)
Description copied from interface:NullAwareGettersFor the input fields, if no field is null, return false. Returns true if one of the columns is null.- Specified by:
anyNullin interfaceNullAwareGetters
-
copy
public BinaryRowData copy()
-
copy
public BinaryRowData copy(BinaryRowData reuse)
-
clear
public void clear()
-
equals
public boolean equals(Object o)
- Overrides:
equalsin classBinarySection
-
hashCode
public int hashCode()
- Overrides:
hashCodein classBinarySection
-
-