@Override public void fillVector(Object valuesToBeConverted, int size, ColumnVectorInfo info, BitSet nullBitset, DataType pageType) { CarbonColumnVector vector = info.vector; int precision = info.measure.getMeasure().getPrecision(); int newMeasureScale = info.measure.getMeasure().getScale(); if (scale < newMeasureScale) { scale = newMeasureScale; } if (valuesToBeConverted instanceof byte[][]) { byte[][] data = (byte[][]) valuesToBeConverted; for (int i = 0; i < size; i++) { if (nullBitset.get(i)) { vector.putNull(i); } else { BigInteger bigInteger = new BigInteger(data[i]); BigDecimal value = new BigDecimal(bigInteger, scale); if (value.scale() < newMeasureScale) { value = value.setScale(newMeasureScale); } vector.putDecimal(i, value, precision); } } } }
.getMeasureValueBasedOnDataType(result, dataType, carbonMeasure.getScale(), carbonMeasure.getPrecision()));
@Override public void fillVector(Object valuesToBeConverted, int size, ColumnVectorInfo info, BitSet nullBitset, DataType pageType) { CarbonColumnVector vector = info.vector; int precision = info.measure.getMeasure().getPrecision(); int newMeasureScale = info.measure.getMeasure().getScale(); if (valuesToBeConverted instanceof byte[][]) { byte[][] data = (byte[][]) valuesToBeConverted; for (int i = 0; i < size; i++) { if (nullBitset.get(i)) { vector.putNull(i); } else { BigDecimal value = DataTypeUtil.byteToBigDecimal(data[i]); if (value.scale() < newMeasureScale) { value = value.setScale(newMeasureScale); } vector.putDecimal(i, value, precision); } } } }
@Override public void fillMeasureVector(int[] filteredRowId, ColumnPage dataChunk, ColumnVectorInfo info) { int offset = info.offset; int len = offset + info.size; int vectorOffset = info.vectorOffset; CarbonColumnVector vector = info.vector; int precision = info.measure.getMeasure().getPrecision(); BitSet nullBitSet = dataChunk.getNullBits(); for (int i = offset; i < len; i++) { int currentRow = filteredRowId[i]; if (nullBitSet.get(currentRow)) { vector.putNull(vectorOffset); } else { BigDecimal decimal = dataChunk.getDecimal(currentRow); if (info.measure.getMeasure().getScale() > decimal.scale()) { decimal = decimal.setScale(info.measure.getMeasure().getScale()); } vector.putDecimal(vectorOffset, decimal, precision); } vectorOffset++; } } }
@Override public void fillMeasureVector(ColumnPage dataChunk, ColumnVectorInfo info) { int offset = info.offset; int len = offset + info.size; int vectorOffset = info.vectorOffset; CarbonColumnVector vector = info.vector; int precision = info.measure.getMeasure().getPrecision(); int newMeasureScale = info.measure.getMeasure().getScale(); BitSet nullBitSet = dataChunk.getNullBits(); for (int i = offset; i < len; i++) { if (nullBitSet.get(i)) { vector.putNull(vectorOffset); } else { BigDecimal decimal = dataChunk.getDecimal(i); if (decimal.scale() < newMeasureScale) { decimal = decimal.setScale(newMeasureScale); } vector.putDecimal(vectorOffset, decimal, precision); } vectorOffset++; } }
private List<Object> getMeasureRangeValues(CarbonMeasure carbonMeasure) { List<ExpressionResult> listOfExpressionResults = new ArrayList<ExpressionResult>(20); if (this.getFilterExpression() instanceof BinaryConditionalExpression) { listOfExpressionResults = ((BinaryConditionalExpression) this.getFilterExpression()).getLiterals(); } List<Object> filterValuesList = new ArrayList<>(20); boolean invalidRowsPresent = false; for (ExpressionResult result : listOfExpressionResults) { try { if (result.getString() == null) { filterValuesList.add(null); continue; } filterValuesList.add(DataTypeUtil.getMeasureValueBasedOnDataType(result.getString(), result.getDataType(), carbonMeasure.getScale(), carbonMeasure.getPrecision())); } catch (FilterIllegalMemberException e) { // Any invalid member while evaluation shall be ignored, system will log the // error only once since all rows the evaluation happens so inorder to avoid // too much log inforation only once the log will be printed. FilterUtil.logError(e, invalidRowsPresent); } } Collections.sort(filterValuesList, org.apache.carbondata.core.util.comparator.Comparator .getComparatorByDataTypeForMeasure(carbonMeasure.getDataType())); return filterValuesList; }
public static Object getMeasureObjectBasedOnDataType(ColumnPage measurePage, int index, DataType dataType, CarbonMeasure carbonMeasure) { if (dataType == DataTypes.BOOLEAN) { return measurePage.getBoolean(index); } else if (dataType == DataTypes.SHORT) { return (short) measurePage.getLong(index); } else if (dataType == DataTypes.INT) { return (int) measurePage.getLong(index); } else if (dataType == DataTypes.LONG) { return measurePage.getLong(index); } else if (dataType == DataTypes.FLOAT) { return measurePage.getFloat(index); } else if (dataType == DataTypes.BYTE) { return measurePage.getByte(index); } else if (DataTypes.isDecimal(dataType)) { BigDecimal bigDecimalMsrValue = measurePage.getDecimal(index); if (null != bigDecimalMsrValue && carbonMeasure.getScale() > bigDecimalMsrValue.scale()) { bigDecimalMsrValue = bigDecimalMsrValue.setScale(carbonMeasure.getScale(), RoundingMode.HALF_UP); } if (null != bigDecimalMsrValue) { return normalizeDecimalValue(bigDecimalMsrValue, carbonMeasure.getPrecision()); } else { return null; } } else { return measurePage.getDouble(index); } }
int newMeasureScale = info.measure.getMeasure().getScale(); if (!(valuesToBeConverted instanceof byte[])) { throw new UnsupportedOperationException("This object type " + valuesToBeConverted.getClass()
Object getMeasureData(ColumnPage dataChunk, int index, CarbonMeasure carbonMeasure) { if (!dataChunk.getNullBits().get(index)) { DataType dataType = carbonMeasure.getDataType(); if (dataType == DataTypes.BOOLEAN) { return dataChunk.getBoolean(index); } else if (dataType == DataTypes.SHORT) { return (short) dataChunk.getLong(index); } else if (dataType == DataTypes.INT) { return (int) dataChunk.getLong(index); } else if (dataType == DataTypes.LONG) { return dataChunk.getLong(index); } else if (dataType == DataTypes.FLOAT) { return dataChunk.getFloat(index); } else if (dataType == DataTypes.BYTE) { return dataChunk.getByte(index); } else if (DataTypes.isDecimal(dataType)) { BigDecimal bigDecimalMsrValue = dataChunk.getDecimal(index); if (null != bigDecimalMsrValue && carbonMeasure.getScale() > bigDecimalMsrValue.scale()) { bigDecimalMsrValue = bigDecimalMsrValue.setScale(carbonMeasure.getScale(), RoundingMode.HALF_UP); } // convert data type as per the computing engine return DataTypeUtil.getDataTypeConverter().convertFromBigDecimalToDecimal( bigDecimalMsrValue); } else { return dataChunk.getDouble(index); } } return null; }
carbonMeasure.getColumnSchema().setDataType(queryMeasure.getMeasure().getDataType()); carbonMeasure.getColumnSchema().setPrecision(queryMeasure.getMeasure().getPrecision()); carbonMeasure.getColumnSchema().setScale(queryMeasure.getMeasure().getScale()); carbonMeasure.getColumnSchema() .setDefaultValue(queryMeasure.getMeasure().getDefaultValue());
fields[msr.getOrdinal()] = new StructField(msr.getColumnName(), DataTypes.createDecimalType(msr.getMeasure().getPrecision(), msr.getMeasure().getScale())); } else { fields[msr.getOrdinal()] = new StructField(msr.getColumnName(), DataTypes.DOUBLE);
} else if (DataTypes.isDecimal(dataType)) { fields[msr.getOrdinal()] = new StructField(msr.getColumnName(), new DecimalType(msr.getMeasure().getPrecision(), msr.getMeasure().getScale()), true, null); } else {
int newScale = 0; if (vectorInfo.measure != null) { newScale = vectorInfo.measure.getMeasure().getScale();
CarbonMeasure measure = (CarbonMeasure) carbonColumn; fields[i] = new StructField(carbonColumn.getColName(), new DecimalType(measure.getPrecision(), measure.getScale()), true, null); } else { fields[i] = new StructField(carbonColumn.getColName(),