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 of 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.

  • Field Details

    • LITTLE_ENDIAN

      public static final boolean LITTLE_ENDIAN
    • HEADER_SIZE_IN_BITS

      public static final int HEADER_SIZE_IN_BITS
      See Also:
  • Constructor Details

    • BinaryRowData

      public BinaryRowData(int arity)
  • Method Details

    • 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: RowData
      Returns the number of fields in this row.

      The number does not include RowKind. It is kept separately.

      Specified by:
      getArity in interface RowData
    • getRowKind

      public org.apache.flink.types.RowKind getRowKind()
      Description copied from interface: RowData
      Returns the kind of change that this row describes in a changelog.
      Specified by:
      getRowKind in interface RowData
      See Also:
      • RowKind
    • setRowKind

      public void setRowKind(org.apache.flink.types.RowKind kind)
      Description copied from interface: RowData
      Sets the kind of change that this row describes in a changelog.
      Specified by:
      setRowKind in interface RowData
      See Also:
      • RowKind
    • setTotalSize

      public void setTotalSize(int sizeInBytes)
    • isNullAt

      public boolean isNullAt(int pos)
      Description copied from interface: RowData
      Returns true if the field is null at the given position.
      Specified by:
      isNullAt in interface RowData
    • setNullAt

      public void setNullAt(int i)
      Specified by:
      setNullAt in interface TypedSetters
    • setInt

      public void setInt(int pos, int value)
      Specified by:
      setInt in interface TypedSetters
    • setLong

      public void setLong(int pos, long value)
      Specified by:
      setLong in interface TypedSetters
    • setDouble

      public void setDouble(int pos, double value)
      Specified by:
      setDouble in interface TypedSetters
    • setDecimal

      public void setDecimal(int pos, DecimalData value, int precision)
      Description copied from interface: TypedSetters
      Set the decimal column value.

      Note: 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.

      Specified by:
      setDecimal in interface TypedSetters
    • setTimestamp

      public void setTimestamp(int pos, TimestampData value, int precision)
      Description copied from interface: TypedSetters
      Set Timestamp value.

      Note: 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.

      Specified by:
      setTimestamp in interface TypedSetters
    • setBoolean

      public void setBoolean(int pos, boolean value)
      Specified by:
      setBoolean in interface TypedSetters
    • setShort

      public void setShort(int pos, short value)
      Specified by:
      setShort in interface TypedSetters
    • setByte

      public void setByte(int pos, byte value)
      Specified by:
      setByte in interface TypedSetters
    • setFloat

      public void setFloat(int pos, float value)
      Specified by:
      setFloat in interface TypedSetters
    • getBoolean

      public boolean getBoolean(int pos)
      Description copied from interface: RowData
      Returns the boolean value at the given position.
      Specified by:
      getBoolean in interface RowData
    • getByte

      public byte getByte(int pos)
      Description copied from interface: RowData
      Returns the byte value at the given position.
      Specified by:
      getByte in interface RowData
    • getShort

      public short getShort(int pos)
      Description copied from interface: RowData
      Returns the short value at the given position.
      Specified by:
      getShort in interface RowData
    • getInt

      public int getInt(int pos)
      Description copied from interface: RowData
      Returns the integer value at the given position.
      Specified by:
      getInt in interface RowData
    • getLong

      public long getLong(int pos)
      Description copied from interface: RowData
      Returns the long value at the given position.
      Specified by:
      getLong in interface RowData
    • getFloat

      public float getFloat(int pos)
      Description copied from interface: RowData
      Returns the float value at the given position.
      Specified by:
      getFloat in interface RowData
    • getDouble

      public double getDouble(int pos)
      Description copied from interface: RowData
      Returns the double value at the given position.
      Specified by:
      getDouble in interface RowData
    • getString

      public StringData getString(int pos)
      Description copied from interface: RowData
      Returns the string value at the given position.
      Specified by:
      getString in interface RowData
    • getDecimal

      public DecimalData getDecimal(int pos, int precision, int scale)
      Description copied from interface: RowData
      Returns 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:
      getDecimal in interface RowData
    • getTimestamp

      public TimestampData getTimestamp(int pos, int precision)
      Description copied from interface: RowData
      Returns 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:
      getTimestamp in interface RowData
    • getRawValue

      public <T> RawValueData<T> getRawValue(int pos)
      Description copied from interface: RowData
      Returns the raw value at the given position.
      Specified by:
      getRawValue in interface RowData
    • getBinary

      public byte[] getBinary(int pos)
      Description copied from interface: RowData
      Returns the binary value at the given position.
      Specified by:
      getBinary in interface RowData
    • getArray

      public ArrayData getArray(int pos)
      Description copied from interface: RowData
      Returns the array value at the given position.
      Specified by:
      getArray in interface RowData
    • getMap

      public MapData getMap(int pos)
      Description copied from interface: RowData
      Returns the map value at the given position.
      Specified by:
      getMap in interface RowData
    • getRow

      public RowData getRow(int pos, int numFields)
      Description copied from interface: RowData
      Returns the row value at the given position.

      The number of fields is required to correctly extract the row.

      Specified by:
      getRow in interface RowData
    • anyNull

      public boolean anyNull()
      The bit is 1 when the field is null. Default is 0.
      Specified by:
      anyNull in interface NullAwareGetters
    • anyNull

      public boolean anyNull(int[] fields)
      Description copied from interface: NullAwareGetters
      For the input fields, if no field is null, return false. Returns true if one of the columns is null.
      Specified by:
      anyNull in interface NullAwareGetters
    • copy

      public BinaryRowData copy()
    • copy

      public BinaryRowData copy(BinaryRowData reuse)
    • clear

      public void clear()
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class BinarySection
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class BinarySection