in fluss-common/src/main/java/com/alibaba/fluss/utils/ArrowUtils.java [282:329]
public static ArrowFieldWriter<InternalRow> createArrowFieldWriter(
ValueVector vector, DataType dataType) {
if (vector instanceof TinyIntVector) {
return ArrowTinyIntWriter.forField((TinyIntVector) vector);
} else if (vector instanceof SmallIntVector) {
return ArrowSmallIntWriter.forField((SmallIntVector) vector);
} else if (vector instanceof IntVector) {
return ArrowIntWriter.forField((IntVector) vector);
} else if (vector instanceof BigIntVector) {
return ArrowBigIntWriter.forField((BigIntVector) vector);
} else if (vector instanceof BitVector) {
return ArrowBooleanWriter.forField((BitVector) vector);
} else if (vector instanceof Float4Vector) {
return ArrowFloatWriter.forField((Float4Vector) vector);
} else if (vector instanceof Float8Vector) {
return ArrowDoubleWriter.forField((Float8Vector) vector);
} else if (vector instanceof VarCharVector) {
return ArrowVarCharWriter.forField((VarCharVector) vector);
} else if (vector instanceof FixedSizeBinaryVector) {
return ArrowBinaryWriter.forField((FixedSizeBinaryVector) vector);
} else if (vector instanceof VarBinaryVector) {
return ArrowVarBinaryWriter.forField((VarBinaryVector) vector);
} else if (vector instanceof DecimalVector) {
DecimalVector decimalVector = (DecimalVector) vector;
return ArrowDecimalWriter.forField(
decimalVector, getPrecision(decimalVector), decimalVector.getScale());
} else if (vector instanceof DateDayVector) {
return ArrowDateWriter.forField((DateDayVector) vector);
} else if (vector instanceof TimeSecVector
|| vector instanceof TimeMilliVector
|| vector instanceof TimeMicroVector
|| vector instanceof TimeNanoVector) {
return ArrowTimeWriter.forField(vector);
} else if (vector instanceof TimeStampVector
&& ((ArrowType.Timestamp) vector.getField().getType()).getTimezone() == null) {
int precision;
if (dataType instanceof LocalZonedTimestampType) {
precision = ((LocalZonedTimestampType) dataType).getPrecision();
return ArrowTimestampLtzWriter.forField(vector, precision);
} else {
precision = ((TimestampType) dataType).getPrecision();
return ArrowTimestampNtzWriter.forField(vector, precision);
}
} else {
throw new UnsupportedOperationException(
String.format("Unsupported type %s.", dataType));
}
}