in parquet/src/main/java/org/apache/iceberg/parquet/ParquetVariantUtil.java [421:493]
public Type primitive(VariantPrimitive<?> primitive) {
switch (primitive.type()) {
case NULL:
return null;
case BOOLEAN_TRUE:
case BOOLEAN_FALSE:
return shreddedPrimitive(PrimitiveType.PrimitiveTypeName.BOOLEAN);
case INT8:
return shreddedPrimitive(
PrimitiveType.PrimitiveTypeName.INT32, LogicalTypeAnnotation.intType(8));
case INT16:
return shreddedPrimitive(
PrimitiveType.PrimitiveTypeName.INT32, LogicalTypeAnnotation.intType(16));
case INT32:
return shreddedPrimitive(PrimitiveType.PrimitiveTypeName.INT32);
case INT64:
return shreddedPrimitive(PrimitiveType.PrimitiveTypeName.INT64);
case FLOAT:
return shreddedPrimitive(PrimitiveType.PrimitiveTypeName.FLOAT);
case DOUBLE:
return shreddedPrimitive(PrimitiveType.PrimitiveTypeName.DOUBLE);
case DECIMAL4:
BigDecimal decimal4 = (BigDecimal) primitive.get();
return shreddedPrimitive(
PrimitiveType.PrimitiveTypeName.INT32,
LogicalTypeAnnotation.decimalType(decimal4.scale(), 9));
case DECIMAL8:
BigDecimal decimal8 = (BigDecimal) primitive.get();
return shreddedPrimitive(
PrimitiveType.PrimitiveTypeName.INT64,
LogicalTypeAnnotation.decimalType(decimal8.scale(), 18));
case DECIMAL16:
BigDecimal decimal16 = (BigDecimal) primitive.get();
return shreddedPrimitive(
PrimitiveType.PrimitiveTypeName.BINARY,
LogicalTypeAnnotation.decimalType(decimal16.scale(), 38));
case DATE:
return shreddedPrimitive(
PrimitiveType.PrimitiveTypeName.INT32, LogicalTypeAnnotation.dateType());
case TIMESTAMPTZ:
return shreddedPrimitive(
PrimitiveType.PrimitiveTypeName.INT64,
LogicalTypeAnnotation.timestampType(true, LogicalTypeAnnotation.TimeUnit.MICROS));
case TIMESTAMPNTZ:
return shreddedPrimitive(
PrimitiveType.PrimitiveTypeName.INT64,
LogicalTypeAnnotation.timestampType(false, LogicalTypeAnnotation.TimeUnit.MICROS));
case BINARY:
return shreddedPrimitive(PrimitiveType.PrimitiveTypeName.BINARY);
case STRING:
return shreddedPrimitive(
PrimitiveType.PrimitiveTypeName.BINARY, LogicalTypeAnnotation.stringType());
case TIME:
return shreddedPrimitive(
PrimitiveType.PrimitiveTypeName.INT64,
LogicalTypeAnnotation.timeType(false, LogicalTypeAnnotation.TimeUnit.MICROS));
case TIMESTAMPTZ_NANOS:
return shreddedPrimitive(
PrimitiveType.PrimitiveTypeName.INT64,
LogicalTypeAnnotation.timestampType(true, LogicalTypeAnnotation.TimeUnit.NANOS));
case TIMESTAMPNTZ_NANOS:
return shreddedPrimitive(
PrimitiveType.PrimitiveTypeName.INT64,
LogicalTypeAnnotation.timestampType(false, LogicalTypeAnnotation.TimeUnit.NANOS));
case UUID:
return shreddedPrimitive(
PrimitiveType.PrimitiveTypeName.FIXED_LEN_BYTE_ARRAY,
LogicalTypeAnnotation.uuidType(),
16);
}
throw new UnsupportedOperationException("Unsupported shredding type: " + primitive.type());
}