in odps-sdk/odps-sdk-core/src/main/java/com/aliyun/odps/table/record/accessor/ArrowToRecordConverter.java [85:140]
public static ArrowVectorAccessor createColumnVectorAccessor(ValueVector vector,
TypeInfo typeInfo,
boolean isExtension) {
switch (typeInfo.getOdpsType()) {
case BOOLEAN:
return new ArrowBitAccessor((BitVector) vector);
case TINYINT:
return new ArrowTinyIntAccessor((TinyIntVector) vector);
case SMALLINT:
return new ArrowSmallIntAccessor((SmallIntVector) vector);
case INT:
return new ArrowIntAccessor((IntVector) vector);
case BIGINT:
return new ArrowBigIntAccessor((BigIntVector) vector);
case FLOAT:
return new ArrowFloat4Accessor((Float4Vector) vector);
case DOUBLE:
return new ArrowFloat8Accessor((Float8Vector) vector);
case DECIMAL:
if (isExtension && (vector instanceof FixedSizeBinaryVector)) {
return new ArrowDecimalExtensionAccessor((FixedSizeBinaryVector) vector);
} else {
return new ArrowDecimalAccessor((DecimalVector) vector);
}
case STRING:
case VARCHAR:
case CHAR:
case JSON:
return new ArrowVarCharAccessor((VarCharVector) vector);
case BINARY:
return new ArrowVarBinaryAccessor((VarBinaryVector) vector);
case DATE:
return new ArrowDateDayAccessor((DateDayVector) vector);
case DATETIME:
return new ArrowTimestampAccessor((TimeStampVector) vector);
case TIMESTAMP:
case TIMESTAMP_NTZ:
if (!isExtension) {
return new ArrowTimestampAccessor((TimeStampVector) vector);
} else {
return new ArrowTimestampExtensionAccessor((StructVector) vector);
}
case ARRAY:
return new ArrowArrayAccessorImpl.ArrowArrayAccessorForRecord((ListVector) vector,
typeInfo, isExtension);
case MAP:
return new ArrowMapAccessorImpl.ArrowMapAccessorForRecord((MapVector) vector, typeInfo,
isExtension);
case STRUCT:
return new ArrowStructAccessorImpl.ArrowStructAccessorForRecord((StructVector) vector,
typeInfo, isExtension);
default:
throw new UnsupportedOperationException(
"Datatype not supported: " + typeInfo.getTypeName());
}
}