public static Optional<Type> createDecimalType(RichColumnDescriptor descriptor) { if (descriptor.getPrimitiveType().getOriginalType() != DECIMAL) { return Optional.empty(); } return Optional.of(createDecimalType(descriptor.getPrimitiveType().getDecimalMetadata())); }
private static Type getInt32Type(RichColumnDescriptor descriptor) { OriginalType originalType = descriptor.getPrimitiveType().getOriginalType(); if (originalType == null) { return INTEGER; } switch (originalType) { case DECIMAL: return createDecimalType(descriptor.getPrimitiveType().getDecimalMetadata()); case DATE: return DateType.DATE; default: return INTEGER; } } }
public static Type getPrestoType(TupleDomain<ColumnDescriptor> effectivePredicate, RichColumnDescriptor descriptor) { switch (descriptor.getType()) { case BOOLEAN: return BooleanType.BOOLEAN; case BINARY: return createDecimalType(descriptor).orElse(createVarcharType(effectivePredicate, descriptor)); case FLOAT: return RealType.REAL; case DOUBLE: return DoubleType.DOUBLE; case INT32: return getInt32Type(descriptor); case INT64: return createDecimalType(descriptor).orElse(BigintType.BIGINT); case INT96: return TimestampType.TIMESTAMP; case FIXED_LEN_BYTE_ARRAY: return createDecimalType(descriptor).orElseThrow(() -> new PrestoException(NOT_SUPPORTED, "Parquet type FIXED_LEN_BYTE_ARRAY supported as DECIMAL; got " + descriptor.getPrimitiveType().getOriginalType())); default: throw new PrestoException(NOT_SUPPORTED, "Unsupported parquet type: " + descriptor.getType()); } }
public static PrimitiveColumnReader createReader(RichColumnDescriptor descriptor) { switch (descriptor.getType()) { case BOOLEAN: return new BooleanColumnReader(descriptor); case INT32: return createDecimalColumnReader(descriptor).orElse(new IntColumnReader(descriptor)); case INT64: return createDecimalColumnReader(descriptor).orElse(new LongColumnReader(descriptor)); case INT96: return new TimestampColumnReader(descriptor); case FLOAT: return new FloatColumnReader(descriptor); case DOUBLE: return new DoubleColumnReader(descriptor); case BINARY: return createDecimalColumnReader(descriptor).orElse(new BinaryColumnReader(descriptor)); case FIXED_LEN_BYTE_ARRAY: return createDecimalColumnReader(descriptor) .orElseThrow(() -> new PrestoException(NOT_SUPPORTED, " type FIXED_LEN_BYTE_ARRAY supported as DECIMAL; got " + descriptor.getPrimitiveType().getOriginalType())); default: throw new PrestoException(NOT_SUPPORTED, "Unsupported parquet type: " + descriptor.getType()); } }
/** * {@inheritDoc} */ @Override public void writeToStringBuilder(StringBuilder sb, String indent) { sb.append(indent) .append(getRepetition().name().toLowerCase()) .append(" ") .append(primitive.name().toLowerCase()) .append(" ") .append(getName()); if (getOriginalType() != null) { sb.append(" (").append(getOriginalType()).append(")"); } }
/** * {@inheritDoc} */ @Override public void writeToStringBuilder(StringBuilder sb, String indent) { sb.append(indent) .append(getRepetition().name().toLowerCase()) .append(" ") .append(primitive.name().toLowerCase()); if (primitive == PrimitiveTypeName.FIXED_LEN_BYTE_ARRAY) { sb.append("(" + length + ")"); } sb.append(" ").append(getName()); if (getOriginalType() != null) { sb.append(" (").append(getOriginalType()); DecimalMetadata meta = getDecimalMetadata(); if (meta != null) { sb.append("(") .append(meta.getPrecision()) .append(",") .append(meta.getScale()) .append(")"); } sb.append(")"); } if (getId() != null) { sb.append(" = ").append(getId()); } }
public static PrimitiveConverter getNewConverter(final PrimitiveType type, final int index, final ConverterParent parent) { if (type.isPrimitive() && (type.asPrimitiveType().getPrimitiveTypeName().equals(PrimitiveType.PrimitiveTypeName.INT96))) { //TODO- cleanup once parquet support Timestamp type annotation. return ETypeConverter.ETIMESTAMP_CONVERTER.getConverter(type, index, parent); } if (OriginalType.DECIMAL == type.getOriginalType()) { return EDECIMAL_CONVERTER.getConverter(type, index, parent); } else if (OriginalType.UTF8 == type.getOriginalType()) { return ESTRING_CONVERTER.getConverter(type, index, parent); } else if (OriginalType.DATE == type.getOriginalType()) { return EDATE_CONVERTER.getConverter(type, index, parent); } Class<?> javaType = type.getPrimitiveTypeName().javaType; for (final ETypeConverter eConverter : values()) { if (eConverter.getType() == javaType) { return eConverter.getConverter(type, index, parent); } } throw new IllegalArgumentException("Converter not found ... for type : " + type); }
private static void showDetails(PrettyPrintWriter out, PrimitiveType type, int depth, MessageType container, List<String> cpath) { String name = Strings.repeat(".", depth) + type.getName(); OriginalType otype = type.getOriginalType(); Repetition rep = type.getRepetition(); PrimitiveTypeName ptype = type.getPrimitiveTypeName(); out.format("%s: %s %s", name, rep, ptype); if (otype != null) out.format(" O:%s", otype); if (container != null) { cpath.add(type.getName()); String[] paths = cpath.toArray(new String[cpath.size()]); cpath.remove(cpath.size() - 1); ColumnDescriptor desc = container.getColumnDescription(paths); int defl = desc.getMaxDefinitionLevel(); int repl = desc.getMaxRepetitionLevel(); out.format(" R:%d D:%d", repl, defl); } out.println(); }
/** * @param id the field id * @return a new PrimitiveType with the same fields and a new id */ @Override public PrimitiveType withId(int id) { return new PrimitiveType(getRepetition(), primitive, length, getName(), getOriginalType(), decimalMeta, new ID(id)); }
@Override public void visit(PrimitiveType primitiveType) { SchemaElement element = new SchemaElement(primitiveType.getName()); element.setRepetition_type(toParquetRepetition(primitiveType.getRepetition())); element.setType(getType(primitiveType.getPrimitiveTypeName())); if (primitiveType.getOriginalType() != null) { element.setConverted_type(getConvertedType(primitiveType.getOriginalType())); } if (primitiveType.getDecimalMetadata() != null) { element.setPrecision(primitiveType.getDecimalMetadata().getPrecision()); element.setScale(primitiveType.getDecimalMetadata().getScale()); } if (primitiveType.getTypeLength() > 0) { element.setType_length(primitiveType.getTypeLength()); } result.add(element); }