Class 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 Detail

      • LITTLE_ENDIAN

        public static final boolean LITTLE_ENDIAN
    • Constructor Detail

      • BinaryRowData

        public BinaryRowData​(int arity)
    • 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: 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 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​(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
      • 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
      • 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
      • clear

        public void clear()