in odps-sdk/odps-sdk-table-api/src/main/java/com/aliyun/odps/table/record/constructor/RecordToArrowConverter.java [65:108]
public static ArrowFieldWriter<ArrayRecord> createArrowFieldWriterForRecord(
ValueVector vector,
TypeInfo typeInfo) {
switch (typeInfo.getOdpsType()) {
case BOOLEAN:
return new ArrowBitWriterImpl.RecordBitWriter((BitVector) vector);
case TINYINT:
return new ArrowTinyIntWriterImpl.RecordTinyIntWriter((TinyIntVector) vector);
case SMALLINT:
return new ArrowSmallIntWriterImpl.RecordSmallIntWriter((SmallIntVector) vector);
case INT:
return new ArrowIntWriterImpl.RecordIntWriter((IntVector) vector);
case BIGINT:
return new ArrowBigIntWriterImpl.RecordBigIntWriter((BigIntVector) vector);
case FLOAT:
return new ArrowFloat4WriterImpl.RecordFloat4Writer((Float4Vector) vector);
case DOUBLE:
return new ArrowFloat8WriterImpl.RecordFloat8Writer((Float8Vector) vector);
case DECIMAL:
return new ArrowDecimalWriterImpl.RecordDecimalWriter((DecimalVector) vector, typeInfo);
case STRING:
case VARCHAR:
case CHAR:
case JSON:
return new ArrowVarCharWriterImpl.RecordVarCharWriter((VarCharVector) vector);
case BINARY:
return new ArrowVarBinaryWriterImpl.RecordVarBinaryWriter((VarBinaryVector) vector);
case DATE:
return new ArrowDateDayWriterImpl.RecordDateWriter((DateDayVector) vector);
case DATETIME:
return new ArrowDateTimeWriterImpl.RecordDateTimeWriter((TimeStampVector) vector);
case TIMESTAMP:
case TIMESTAMP_NTZ:
return new ArrowTimeStampWriterImpl.RecordTimeStampWriter((TimeStampVector) vector, typeInfo);
case ARRAY:
return new ArrowArrayWriterImpl.RecordArrayWriter((ListVector) vector, typeInfo);
case MAP:
return new ArrowMapWriterImpl.RecordMapWriter((MapVector) vector, typeInfo);
case STRUCT:
return new ArrowStructWriterImpl.RecordStructWriter((StructVector) vector, typeInfo);
default:
throw new UnsupportedOperationException("Datatype not supported: " + typeInfo.getTypeName());
}
}