in paimon-format/src/main/java/org/apache/paimon/format/parquet/reader/ParquetSplitReaderUtil.java [81:152]
public static ColumnReader createColumnReader(
DataType fieldType,
Type type,
List<ColumnDescriptor> columnDescriptors,
PageReadStore pages,
ParquetField field,
int depth)
throws IOException {
List<ColumnDescriptor> descriptors =
getAllColumnDescriptorByType(depth, type, columnDescriptors);
switch (fieldType.getTypeRoot()) {
case BOOLEAN:
return new BooleanColumnReader(descriptors.get(0), pages);
case TINYINT:
return new ByteColumnReader(descriptors.get(0), pages);
case DOUBLE:
return new DoubleColumnReader(descriptors.get(0), pages);
case FLOAT:
return new FloatColumnReader(descriptors.get(0), pages);
case INTEGER:
case DATE:
case TIME_WITHOUT_TIME_ZONE:
return new IntColumnReader(descriptors.get(0), pages);
case BIGINT:
return new LongColumnReader(descriptors.get(0), pages);
case SMALLINT:
return new ShortColumnReader(descriptors.get(0), pages);
case CHAR:
case VARCHAR:
case BINARY:
case VARBINARY:
if (descriptors.get(0).getPrimitiveType().getPrimitiveTypeName()
== PrimitiveType.PrimitiveTypeName.FIXED_LEN_BYTE_ARRAY) {
return new FixedLenBytesBinaryColumnReader(
descriptors.get(0), pages, ((BinaryType) fieldType).getLength());
}
return new BytesColumnReader(descriptors.get(0), pages);
case TIMESTAMP_WITHOUT_TIME_ZONE:
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
if (descriptors.get(0).getPrimitiveType().getPrimitiveTypeName()
== PrimitiveType.PrimitiveTypeName.INT64) {
return new LongColumnReader(descriptors.get(0), pages);
}
return new TimestampColumnReader(true, descriptors.get(0), pages);
case DECIMAL:
switch (descriptors.get(0).getPrimitiveType().getPrimitiveTypeName()) {
case INT32:
return new IntColumnReader(descriptors.get(0), pages);
case INT64:
return new LongColumnReader(descriptors.get(0), pages);
case BINARY:
return new BytesColumnReader(descriptors.get(0), pages);
case FIXED_LEN_BYTE_ARRAY:
return new FixedLenBytesDecimalColumnReader(
descriptors.get(0),
pages,
((DecimalType) fieldType).getPrecision());
}
case VARIANT:
List<ColumnReader> fieldReaders = new ArrayList<>();
fieldReaders.add(new BytesColumnReader(descriptors.get(0), pages));
fieldReaders.add(new BytesColumnReader(descriptors.get(1), pages));
return new RowColumnReader(fieldReaders);
case ARRAY:
case MAP:
case MULTISET:
case ROW:
return new NestedColumnReader(true, pages, field);
default:
throw new UnsupportedOperationException(fieldType + " is not supported now.");
}
}