说明:一般用户常用的是GenericRowData。flink内部则多使用BinaryRowData。
代码较为复杂需要根据RowType获取到内部fields的logicalType,再使用RowData.createFieldGetter方法创建fieldGetters。
public static void copyRowData(RowData input, GenericRowData output, List<RowData.FieldGetter> fieldGetters) {
for (int i = 0; i < input.getArity() && i < output.getArity(); i++) {
if (input instanceof GenericRowData) {
output.setField(i, ((GenericRowData) input).getField(i));
} else {
Preconditions.checkArgument(fieldGetters != null);
Object value = fieldGetters.get(i).getFieldOrNull(input);
output.setField(i, value);
}
}
}
使用RowDataSerializer.copy方法
public RowDataSerializer(RowType rowType) {
...
}
public RowData copy(RowData from) {
...
}