final int precision = decimalTypeInfo.precision(); final int scale = decimalTypeInfo.scale(); return Field.nullable(name, new ArrowType.Decimal(precision, scale)); case INTERVAL_YEAR_MONTH: return Field.nullable(name, MinorType.INTERVALYEAR.getType());
decimal(child.getName(), arrowType.getScale(), arrowType.getPrecision()); break;
decimal(child.getName(), arrowType.getScale(), arrowType.getPrecision()); break;
int precision = decimalType.precision(); int scale = decimalType.scale(); return new ArrowType.Decimal(precision, scale);
case DECIMAL: Decimal dec = ((Decimal) field.getType()); return new DecimalVector(field.getName(), allocator, dec.getPrecision(), dec.getScale()); case FIXEDSIZEBINARY: return new FixedSizeBinaryVector(field.getName(), allocator, WIDTH_ESTIMATE);
.addField(new Field("string", FieldType.nullable(ArrowType.Utf8.INSTANCE), null)) .addField(new Field("bool", FieldType.nullable(ArrowType.Bool.INSTANCE), null)) .addField(new Field("decimal", FieldType.nullable(new ArrowType.Decimal(0, 0)), null)) .addField(new Field("int", FieldType.nullable(new ArrowType.Int(8, false)), null)) .addField(new Field("date", FieldType.nullable(new ArrowType.Date(DateUnit.MILLISECOND)), null))
return; case DECIMAL: eval.assign(out.getHolder().ref("scale"), JExpr.lit(ct.getType(Decimal.class).getScale())); eval.assign(out.getHolder().ref("precision"), JExpr.lit(ct.getType(Decimal.class).getPrecision())); eval.assign(out.getHolder().ref("start"), JExpr.lit(TypeHelper.getSize(getArrowMinorType(type))).mul(indexVariable)); eval.assign(out.getHolder().ref("buffer"), vector.invoke("getDataBuffer"));
case DECIMAL38SPARSE: Decimal fromDecimal = from.getType(Decimal.class); return to.getScale() == fromDecimal.getScale() && to.getPrecision() == fromDecimal.getPrecision(); case VARBINARY: case VARCHAR:
case DECIMAL: { DecimalTypeInfo decimalTypeInfo = (DecimalTypeInfo) pTypeInfo; return new Field(name, true, new Decimal(decimalTypeInfo.getPrecision(), decimalTypeInfo.getScale()), null);
switch(fieldType) { case Decimal: builder.setPrecision(((Decimal) arrowType).getPrecision()).setScale(((Decimal) arrowType).getScale()); break;
return new Field(name, true, new Decimal(serializedField.getMajorType().getPrecision(), serializedField.getMajorType().getScale()), null); default: return new Field(name, true, arrowMinorType.getType(), null);
@Override public DecimalWriter decimal(String name, int scale, int precision) { FieldWriter writer = fields.get(handleCase(name)); if(writer == null) { ValueVector vector; ValueVector currentVector = container.getChild(name); DecimalVector v = container.addOrGet(name, FieldType.nullable( new org.apache.arrow.vector.types.pojo.ArrowType.Decimal(precision, scale) ), DecimalVector.class); writer = new PromotableWriter(v, container, getNullableStructWriterFactory()); vector = v; if (currentVector == null || currentVector != vector) { if(this.initialCapacity > 0) { vector.setInitialCapacity(this.initialCapacity); } vector.allocateNewSafe(); } writer.setPosition(idx()); fields.put(handleCase(name), writer); } else { if (writer instanceof PromotableWriter) { // ensure writers are initialized ((PromotableWriter)writer).getWriter(MinorType.DECIMAL); } } return writer; }
Decimal decimal = toType.getType(Decimal.class); castArgs.add(new ValueExpressions.LongExpression(decimal.getPrecision())); castArgs.add(new ValueExpressions.LongExpression(decimal.getScale()));
@Override public DecimalWriter decimal(String name, int scale, int precision) { FieldWriter writer = fields.get(handleCase(name)); if(writer == null) { ValueVector vector; ValueVector currentVector = container.getChild(name); DecimalVector v = container.addOrGet(name, FieldType.nullable( new org.apache.arrow.vector.types.pojo.ArrowType.Decimal(precision, scale) ), DecimalVector.class); writer = new PromotableWriter(v, container, getNullableStructWriterFactory()); vector = v; if (currentVector == null || currentVector != vector) { if(this.initialCapacity > 0) { vector.setInitialCapacity(this.initialCapacity); } vector.allocateNewSafe(); } writer.setPosition(idx()); fields.put(handleCase(name), writer); } else { if (writer instanceof PromotableWriter) { // ensure writers are initialized ((PromotableWriter)writer).getWriter(MinorType.DECIMAL); } } return writer; }
/** * See https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#decimal * @param type an arrow decimal type * @return a mapping from the arrow decimal to the Parquet type */ @Override public TypeMapping visit(Decimal type) { int precision = type.getPrecision(); int scale = type.getScale(); if (1 <= precision && precision <= 9) { return decimal(INT32, precision, scale); } else if (1 <= precision && precision <= 18) { return decimal(INT64, precision, scale); } else { // Better: FIXED_LENGTH_BYTE_ARRAY with length return decimal(BINARY, precision, scale); } }
/** * Instantiate a DecimalVector. This doesn't allocate any memory for * the data in vector. * * @param name name of the vector * @param fieldType type of Field materialized by this vector * @param allocator allocator for memory management. */ public DecimalVector(String name, FieldType fieldType, BufferAllocator allocator) { super(name, allocator, fieldType, TYPE_WIDTH); ArrowType.Decimal arrowType = (ArrowType.Decimal) fieldType.getType(); reader = new DecimalReaderImpl(DecimalVector.this); this.precision = arrowType.getPrecision(); this.scale = arrowType.getScale(); }
public static int prec(LogicalExpression e){ return e.getCompleteType().getType(Decimal.class).getPrecision(); }
public static CompleteType fromDecimalPrecisionScale(int precision, int scale){ return new CompleteType(new ArrowType.Decimal(precision, scale)); }
public static int scale(LogicalExpression e){ return e.getCompleteType().getType(Decimal.class).getScale(); }
@Override public Integer visit(Time type) { return getPrecision(type.getUnit()); }