in odps-sdk/odps-sdk-table-api/src/main/java/com/aliyun/odps/table/record/constructor/ArrowStructWriterImpl.java [116:159]
public static ArrowFieldWriter<Struct> createArrowFieldWriterForStruct(
ValueVector vector,
TypeInfo typeInfo) {
switch (typeInfo.getOdpsType()) {
case BOOLEAN:
return new ArrowBitWriterImpl.StructBitWriter((BitVector) vector);
case TINYINT:
return new ArrowTinyIntWriterImpl.StructTinyIntWriter((TinyIntVector) vector);
case SMALLINT:
return new ArrowSmallIntWriterImpl.StructSmallIntWriter((SmallIntVector) vector);
case INT:
return new ArrowIntWriterImpl.StructIntWriter((IntVector) vector);
case BIGINT:
return new ArrowBigIntWriterImpl.StructBigIntWriter((BigIntVector) vector);
case FLOAT:
return new ArrowFloat4WriterImpl.StructFloat4Writer((Float4Vector) vector);
case DOUBLE:
return new ArrowFloat8WriterImpl.StructFloat8Writer((Float8Vector) vector);
case DECIMAL:
return new ArrowDecimalWriterImpl.StructDecimalWriter((DecimalVector) vector, typeInfo);
case STRING:
case VARCHAR:
case CHAR:
case JSON:
return new ArrowVarCharWriterImpl.StructVarCharWriter((VarCharVector) vector);
case BINARY:
return new ArrowVarBinaryWriterImpl.StructVarBinaryWriter((VarBinaryVector) vector);
case DATE:
return new ArrowDateDayWriterImpl.StructDateWriter((DateDayVector) vector);
case DATETIME:
return new ArrowDateTimeWriterImpl.StructDateTimeWriter((TimeStampVector) vector);
case TIMESTAMP:
case TIMESTAMP_NTZ:
return new ArrowTimeStampWriterImpl.StructTimeStampWriter((TimeStampVector) vector, typeInfo);
case ARRAY:
return new ArrowArrayWriterImpl.StructArrayWriter((ListVector) vector, typeInfo);
case MAP:
return new ArrowMapWriterImpl.StructMapWriter((MapVector) vector, typeInfo);
case STRUCT:
return new ArrowStructWriterImpl.StructArrowStructWriter((StructVector) vector, typeInfo);
default:
throw new UnsupportedOperationException("Datatype not supported: " + typeInfo.getTypeName());
}
}