CarbonMeasure measure = measureColumnResolvedFilterInfo.getMeasure(); SerializableComparator comparator = Comparator.getComparatorByDataTypeForMeasure(measure.getDataType()); Object defaultValue = null; if (null != measure.getDefaultValue()) { .getMeasureDefaultValue(measure.getColumnSchema(), measure.getDefaultValue());
@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); } } } }
private void addMeasures(List<CarbonMeasure> measures) { for (int i = 0; i < measures.size(); i++) { CarbonMeasure measure = measures.get(i); measureSpec[i] = new MeasureSpec(measure.getColName(), measure.getDataType()); } }
/** * Gets the default value for each CarbonMeasure * * @param carbonMeasure * @return */ private Object getMeasureDefaultValue(CarbonMeasure carbonMeasure) { return RestructureUtil.getMeasureDefaultValueByType(carbonMeasure.getColumnSchema(), carbonMeasure.getDefaultValue()); }
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; }
if (isColumnMatches(isTransactionalTable, carbonMeasure, queryMeasure.getMeasure())) { ProjectionMeasure currentBlockMeasure = new ProjectionMeasure(carbonMeasure); carbonMeasure.getColumnSchema().setDataType(queryMeasure.getMeasure().getDataType()); carbonMeasure.getColumnSchema().setPrecision(queryMeasure.getMeasure().getPrecision()); carbonMeasure.getColumnSchema().setScale(queryMeasure.getMeasure().getScale()); carbonMeasure.getColumnSchema() .setDefaultValue(queryMeasure.getMeasure().getDefaultValue()); currentBlockMeasure.setOrdinal(queryMeasure.getOrdinal()); presentMeasure.add(currentBlockMeasure); measureOrdinalList.add(carbonMeasure.getOrdinal()); measureExistsInCurrentBlock[index] = true; break; defaultValues[index] = getMeasureDefaultValue(queryMeasure.getMeasure().getColumnSchema(), queryMeasure.getMeasure().getDefaultValue()); blockExecutionInfo.setRestructuredBlock(true);
/** * initialise data type for measures for their storage format */ public static DataType[] initDataType(CarbonTable carbonTable, String tableName, int measureCount) { DataType[] type = new DataType[measureCount]; for (int i = 0; i < type.length; i++) { type[i] = DataTypes.DOUBLE; } List<CarbonMeasure> measures = carbonTable.getMeasureByTableName(tableName); for (int i = 0; i < measureCount; i++) { type[i] = measures.get(i).getDataType(); } return type; }
SegmentProperties segmentProperties) { if (null != msrColResolvedFilterInfo && msrColResolvedFilterInfo.getMeasure().isMeasure()) { CarbonMeasure measuresFromCurrentBlock = segmentProperties .getMeasureFromCurrentBlock(msrColResolvedFilterInfo.getMeasure().getColumnId()); if (null != measuresFromCurrentBlock) { msrColResolvedFilterInfo.getCopyObject(); msrColResolvedFilterInfoCopyObject.setMeasure(measuresFromCurrentBlock); msrColResolvedFilterInfoCopyObject.setColumnIndex(measuresFromCurrentBlock.getOrdinal()); msrColResolvedFilterInfoCopyObject.setType(measuresFromCurrentBlock.getDataType()); return new ExcludeFilterExecuterImpl(null, msrColResolvedFilterInfoCopyObject, segmentProperties, true);
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; }
if (!columnsInTable.get(index).isDimensionColumn()) { ProjectionMeasure measure = new ProjectionMeasure( new CarbonMeasure(columnsInTable.get(index), dimension.getDimension().getOrdinal(), dimension.getDimension().getSchemaOrdinal())); measure.setOrdinal(dimension.getOrdinal()); int index = columnsInTable.indexOf(measure.getMeasure().getColumnSchema()); if (index > -1) { if (columnsInTable.get(index).isDimensionColumn()) { ProjectionDimension dimension = new ProjectionDimension( new CarbonDimension(columnsInTable.get(index), measure.getMeasure().getOrdinal(), measure.getMeasure().getSchemaOrdinal(), -1, -1)); dimension.setOrdinal(measure.getOrdinal()); updatedDims.add(dimension);
.getMeasureVectorFiller(queryMeasures[i].getMeasure().getDataType()); columnVectorInfo.ordinal = queryMeasures[i].getMeasure().getOrdinal(); columnVectorInfo.measure = queryMeasures[i]; this.measureColumnInfo[j++] = columnVectorInfo;
public ProjectionMeasure(CarbonMeasure measure) { super(measure.getColName()); this.measure = measure; }
/** * hash code * @return */ @Override public int hashCode() { return this.getColumnSchema().getColumnUniqueId().hashCode(); } }
} else if (DataTypes.isDecimal(dataType)) { vector.putDecimals(columnVectorInfo.vectorOffset, columnVectorInfo.size, (BigDecimal) defaultValue, measure.getPrecision()); } else if (dataType == DataTypes.BOOLEAN) { vector.putBoolean(columnVectorInfo.vectorOffset, (Boolean) defaultValue);
/** * This method will search for a given measure in the current block measures list * * @param blockMeasures * @param columnId * @return */ public static CarbonMeasure getMeasureFromCurrentBlock(List<CarbonMeasure> blockMeasures, String columnId) { CarbonMeasure currentBlockMeasure = null; for (CarbonMeasure blockMeasure : blockMeasures) { if (columnId.equals(blockMeasure.getColumnId())) { currentBlockMeasure = blockMeasure; break; } } return currentBlockMeasure; }
measures.add(new CarbonMeasure(columnSchema, ++measureOrdinal));
DataType dataType = msr.getMeasure().getDataType(); if (dataType == DataTypes.BOOLEAN || dataType == DataTypes.SHORT || dataType == DataTypes.INT || dataType == DataTypes.LONG || dataType == DataTypes.FLOAT || dataType == DataTypes.BYTE) { fields[msr.getOrdinal()] = new StructField(msr.getColumnName(), msr.getMeasure().getDataType()); } else if (DataTypes.isDecimal(dataType)) { 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);
public int[] getColumnsValueSize() { int[] dimensionValueSize = new int[eachDimColumnValueSize.length + eachComplexDimColumnValueSize.length + measures .size()]; System .arraycopy(eachDimColumnValueSize, 0, dimensionValueSize, 0, eachDimColumnValueSize.length); System.arraycopy(eachComplexDimColumnValueSize, 0, dimensionValueSize, eachDimColumnValueSize.length, eachComplexDimColumnValueSize.length); int k = eachDimColumnValueSize.length + eachComplexDimColumnValueSize.length; for (int i = 0; i < measures.size(); i++) { DataType dataType = measures.get(i).getDataType(); if (DataTypes.isDecimal(dataType)) { dimensionValueSize[k++] = -1; } else { dimensionValueSize[k++] = 8; } } return dimensionValueSize; }
MeasureColumnResolvedFilterInfo msrColResolvedFilterInfo, SegmentProperties segmentProperties) { if (null != msrColResolvedFilterInfo && msrColResolvedFilterInfo.getMeasure().isMeasure()) { CarbonMeasure measuresFromCurrentBlock = segmentProperties .getMeasureFromCurrentBlock(msrColResolvedFilterInfo.getMeasure().getColumnId()); if (null != measuresFromCurrentBlock) { msrColResolvedFilterInfo.getCopyObject(); msrColResolvedFilterInfoCopyObject.setMeasure(measuresFromCurrentBlock); msrColResolvedFilterInfoCopyObject.setColumnIndex(measuresFromCurrentBlock.getOrdinal()); msrColResolvedFilterInfoCopyObject.setType(measuresFromCurrentBlock.getDataType()); return new IncludeFilterExecuterImpl(null, msrColResolvedFilterInfoCopyObject, segmentProperties, true);
/** * Fill measure default measure columns */ private void fillMeasureDefaultValues() { for (int i = 0; i < queryMeasures.length; i++) { if (!measureInfo.getMeasureExists()[i]) { measureDefaultValues[i] = RestructureUtil .getMeasureDefaultValueByType(queryMeasures[i].getMeasure().getColumnSchema(), queryMeasures[i].getMeasure().getDefaultValue()); } } }