@PublicEvolving public interface RowData
RowType
and other
(possibly nested) structured types such as StructuredType
in the table ecosystem.
All top-level records that are travelling through Table API or SQL pipelines during runtime
are instances of this interface. Each RowData
contains a RowKind
which represents
the kind of change that a row describes in a changelog. The RowKind
is just metadata
information of row and thus not part of the table's schema, i.e., not a dedicated field.
Note: All fields of this data structure must be internal data structures.
The RowData
interface has different implementations which are designed for different
scenarios:
BinaryRowData
is backed by references to MemorySegment
instead of using Java objects to reduce the serialization/deserialization
overhead.
GenericRowData
is backed by an array of Java
Object
which is easy to construct and efficient to update.
GenericRowData
is intended for public use and has stable behavior. It is recommended
to construct instances of RowData
with this class if internal data structures are
required.
The mappings from Flink's Table API and SQL data types to the internal data structures are listed in the following table:
+--------------------------------+-----------------------------------------+ | SQL Data Types | Internal Data Structures | +--------------------------------+-----------------------------------------+ | BOOLEAN | boolean | +--------------------------------+-----------------------------------------+ | CHAR / VARCHAR / STRING |StringData
| +--------------------------------+-----------------------------------------+ | BINARY / VARBINARY / BYTES | byte[] | +--------------------------------+-----------------------------------------+ | DECIMAL |DecimalData
| +--------------------------------+-----------------------------------------+ | TINYINT | byte | +--------------------------------+-----------------------------------------+ | SMALLINT | short | +--------------------------------+-----------------------------------------+ | INT | int | +--------------------------------+-----------------------------------------+ | BIGINT | long | +--------------------------------+-----------------------------------------+ | FLOAT | float | +--------------------------------+-----------------------------------------+ | DOUBLE | double | +--------------------------------+-----------------------------------------+ | DATE | int (number of days since epoch) | +--------------------------------+-----------------------------------------+ | TIME | int (number of milliseconds of the day) | +--------------------------------+-----------------------------------------+ | TIMESTAMP |TimestampData
| +--------------------------------+-----------------------------------------+ | TIMESTAMP WITH LOCAL TIME ZONE |TimestampData
| +--------------------------------+-----------------------------------------+ | INTERVAL YEAR TO MONTH | int (number of months) | +--------------------------------+-----------------------------------------+ | INTERVAL DAY TO MONTH | long (number of milliseconds) | +--------------------------------+-----------------------------------------+ | ROW / structured types |RowData
| +--------------------------------+-----------------------------------------+ | ARRAY |ArrayData
| +--------------------------------+-----------------------------------------+ | MAP / MULTISET |MapData
| +--------------------------------+-----------------------------------------+ | RAW |RawValueData
| +--------------------------------+-----------------------------------------+
Nullability is always handled by the container data structure.
Modifier and Type | Interface and Description |
---|---|
static interface |
RowData.FieldGetter
Accessor for getting the field of a row during runtime.
|
Modifier and Type | Method and Description |
---|---|
static RowData.FieldGetter |
createFieldGetter(LogicalType fieldType,
int fieldPos)
Creates an accessor for getting elements in an internal row data structure at the given
position.
|
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.
|
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.
|
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.
|
boolean |
isNullAt(int pos)
Returns true if the field is null at the given position.
|
void |
setRowKind(RowKind kind)
Sets the kind of change that this row describes in a changelog.
|
int getArity()
The number does not include RowKind
. It is kept separately.
RowKind getRowKind()
RowKind
void setRowKind(RowKind kind)
RowKind
boolean isNullAt(int pos)
boolean getBoolean(int pos)
byte getByte(int pos)
short getShort(int pos)
int getInt(int pos)
long getLong(int pos)
float getFloat(int pos)
double getDouble(int pos)
StringData getString(int pos)
DecimalData getDecimal(int pos, int precision, int scale)
The precision and scale are required to determine whether the decimal value was stored in
a compact representation (see DecimalData
).
TimestampData getTimestamp(int pos, int precision)
The precision is required to determine whether the timestamp value was stored in a compact
representation (see TimestampData
).
<T> RawValueData<T> getRawValue(int pos)
byte[] getBinary(int pos)
ArrayData getArray(int pos)
MapData getMap(int pos)
RowData getRow(int pos, int numFields)
The number of fields is required to correctly extract the row.
static RowData.FieldGetter createFieldGetter(LogicalType fieldType, int fieldPos)
fieldType
- the element type of the rowfieldPos
- the element type of the rowCopyright © 2014–2023 The Apache Software Foundation. All rights reserved.