private void evaluateDecimal(VectorizedRowBatch vrg) { DecimalColumnVector dcv = (DecimalColumnVector) vrg.cols[outputColumnNum]; dcv.isRepeating = true; if (!isNullValue) { dcv.isNull[0] = false; dcv.set(0, decimalValue); } else { dcv.isNull[0] = true; dcv.noNulls = false; } }
/** * Convert input decimal value to a decimal with a possibly different precision and scale, * at position i in the respective vectors. */ protected void convert(DecimalColumnVector outputColVector, DecimalColumnVector inputColVector, int i) { // The set routine enforces precision and scale. outputColVector.set(i, inputColVector.vector[i]); }
private void evaluateDecimal(ColumnVector colVector) { DecimalColumnVector dcv = (DecimalColumnVector) colVector; dcv.isRepeating = true; if (!isNullValue) { dcv.isNull[0] = false; dcv.set(0, decimalValue); } else { dcv.isNull[0] = true; dcv.noNulls = false; } }
protected void assignDecimal(HiveDecimal value, int index) { outCol.set(index, value); } protected void assignDecimal(HiveDecimalWritable hdw, int index) {
protected void assignDecimal(HiveDecimalWritable hdw, int index) { outCol.set(index, hdw); } }
@Override public void assignRowColumn(VectorizedRowBatch batch, int batchIndex, int columnNum, AggregationBuffer agg) throws HiveException { DecimalColumnVector outputColVector = (DecimalColumnVector) batch.cols[columnNum]; Aggregation myagg = (Aggregation) agg; if (myagg.isNull) { outputColVector.noNulls = false; outputColVector.isNull[batchIndex] = true; return; } outputColVector.isNull[batchIndex] = false; outputColVector.set(batchIndex, myagg.value); } }
@Override public void assignRowColumn(VectorizedRowBatch batch, int batchIndex, int columnNum, AggregationBuffer agg) throws HiveException { DecimalColumnVector outputColVector = (DecimalColumnVector) batch.cols[columnNum]; Aggregation myagg = (Aggregation) agg; if (myagg.isNull) { outputColVector.noNulls = false; outputColVector.isNull[batchIndex] = true; return; } outputColVector.isNull[batchIndex] = false; outputColVector.set(batchIndex, myagg.value); } }
protected void assignDecimal(HiveDecimal value, int index) { outCol.set(index, value); } protected void assignDecimal(HiveDecimalWritable hdw, int index) {
protected void assignDecimal(HiveDecimalWritable hdw, int index) { outCol.set(index, hdw); } }
@Override public void assignRowColumn(VectorizedRowBatch batch, int batchIndex, int columnNum, AggregationBuffer agg) throws HiveException { StructColumnVector outputColVector = (StructColumnVector) batch.cols[columnNum]; Aggregation myagg = (Aggregation) agg; if (myagg.isNull || myagg.mergeCount == 0) { outputColVector.noNulls = false; outputColVector.isNull[batchIndex] = true; return; } outputColVector.isNull[batchIndex] = false; ColumnVector[] fields = outputColVector.fields; fields[AVERAGE_COUNT_FIELD_INDEX].isNull[batchIndex] = false; ((LongColumnVector) fields[AVERAGE_COUNT_FIELD_INDEX]).vector[batchIndex] = myagg.mergeCount; fields[AVERAGE_SUM_FIELD_INDEX].isNull[batchIndex] = false; ((DecimalColumnVector) fields[AVERAGE_SUM_FIELD_INDEX]).set(batchIndex, myagg.mergeSum); // NULL out useless source field. ColumnVector sourceColVector = (ColumnVector) fields[AVERAGE_SOURCE_FIELD_INDEX]; sourceColVector.isRepeating = true; sourceColVector.noNulls = false; sourceColVector.isNull[0] = true; } }
public void fill(HiveDecimal value) { isRepeating = true; isNull[0] = false; if (vector[0] == null) { vector[0] = new HiveDecimalWritable(value); } set(0, value); }
@Override protected void func(DecimalColumnVector outV, LongColumnVector inV, int i) { outV.set(i, HiveDecimal.create(inV.vector[i])); } }
@Override public void assign( ColumnVector columnVector, int row, Object value) { DecimalColumnVector dcv = (DecimalColumnVector) columnVector; dcv.set(row, (HiveDecimal) value); } };
/** * Convert input string to a decimal, at position i in the respective vectors. */ protected void func(DecimalColumnVector outputColVector, BytesColumnVector inputColVector, int i) { String s; try { /* If this conversion is frequently used, this should be optimized, * e.g. by converting to decimal from the input bytes directly without * making a new string. */ s = new String(inputColVector.vector[i], inputColVector.start[i], inputColVector.length[i], "UTF-8"); outputColVector.set(i, HiveDecimal.create(s)); } catch (Exception e) { // for any exception in conversion to decimal, produce NULL outputColVector.noNulls = false; outputColVector.isNull[i] = true; } }
@Override void copy(VectorizedRowBatch inBatch, int inBatchIndex, VectorizedRowBatch outBatch, int outBatchIndex) { DecimalColumnVector inColVector = (DecimalColumnVector) inBatch.cols[inColumnIndex]; DecimalColumnVector outColVector = (DecimalColumnVector) outBatch.cols[outColumnIndex]; if (inColVector.isRepeating) { if (inColVector.noNulls || !inColVector.isNull[0]) { outColVector.isNull[outBatchIndex] = false; outColVector.set(outBatchIndex, inColVector.vector[0]); } else { VectorizedBatchUtil.setNullColIsNullValue(outColVector, outBatchIndex); } } else { if (inColVector.noNulls || !inColVector.isNull[inBatchIndex]) { outColVector.isNull[outBatchIndex] = false; outColVector.set(outBatchIndex, inColVector.vector[inBatchIndex]); } else { VectorizedBatchUtil.setNullColIsNullValue(outColVector, outBatchIndex); } } } }
((LongColumnVector) fields[AVERAGE_COUNT_FIELD_INDEX]).vector[batchIndex] = myagg.count; fields[AVERAGE_SUM_FIELD_INDEX].isNull[batchIndex] = false; ((DecimalColumnVector) fields[AVERAGE_SUM_FIELD_INDEX]).set(batchIndex, myagg.sum);
@Override protected void func(DecimalColumnVector outV, TimestampColumnVector inV, int i) { outV.set(i, TimestampWritable.getHiveDecimal(inV.asScratchTimestamp(i))); } }
@Override protected void func(DecimalColumnVector outV, TimestampColumnVector inV, int i) { Double timestampDouble = TimestampUtils.getDouble(inV.asScratchTimestamp(i)); HiveDecimal result = HiveDecimal.create(timestampDouble.toString()); outV.set(i, HiveDecimal.create(timestampDouble.toString())); } }
@Override public void assignRowColumn(VectorizedRowBatch batch, int batchIndex, int columnNum, AggregationBuffer agg) throws HiveException { DecimalColumnVector outputColVector = (DecimalColumnVector) batch.cols[columnNum]; Aggregation myagg = (Aggregation) agg; final boolean isNull; if (!myagg.isNull) { myagg.sum.mutateEnforcePrecisionScale( outputDecimalTypeInfo.getPrecision(), outputDecimalTypeInfo.getScale()); isNull = !myagg.sum.isSet(); } else { isNull = true; } if (isNull) { outputColVector.noNulls = false; outputColVector.isNull[batchIndex] = true; return; } outputColVector.isNull[batchIndex] = false; outputColVector.set(batchIndex, myagg.sum); } }
private VectorizedRowBatch getBatchDecimalTimestamp(double[] doubleValues) { VectorizedRowBatch b = new VectorizedRowBatch(2); DecimalColumnVector dv; b.cols[0] = dv = new DecimalColumnVector(doubleValues.length, HiveDecimal.SYSTEM_DEFAULT_PRECISION, HiveDecimal.SYSTEM_DEFAULT_SCALE); b.cols[1] = new TimestampColumnVector(doubleValues.length); dv.noNulls = true; Random r = new Random(94830); for (int i = 0; i < doubleValues.length; i++) { long millis = RandomTypeUtil.randomMillis(r); Timestamp ts = new Timestamp(millis); int nanos = RandomTypeUtil.randomNanos(r); ts.setNanos(nanos); TimestampWritableV2 tsw = new TimestampWritableV2( org.apache.hadoop.hive.common.type.Timestamp.ofEpochMilli(ts.getTime(), ts.getNanos())); double asDouble = tsw.getDouble(); doubleValues[i] = asDouble; HiveDecimal hiveDecimal = HiveDecimal.create(new BigDecimal(asDouble)); dv.set(i, hiveDecimal); } b.size = doubleValues.length; return b; }