private static Set<Integer> getFilterMeasureOrdinal(Set<CarbonMeasure> filterMeasures) { Set<Integer> filterMeasuresOrdinal = new HashSet<>(); for (CarbonMeasure filterMeasure : filterMeasures) { filterMeasuresOrdinal.add(filterMeasure.getOrdinal()); } return filterMeasuresOrdinal; }
/** * Below method will be used to fill the mapping * of measure ordinal to its block index mapping in * file */ private void fillOrdinalToChunkIndexMappingForMeasureColumns() { int blockOrdinal = 0; int index = 0; while (index < measures.size()) { measuresOrdinalToChunkMapping.put(measures.get(index).getOrdinal(), blockOrdinal); blockOrdinal++; index++; } }
/** * Below method will used to get the method will be used to get the measure * block indexes to be read from the file * * @param queryMeasures query measure * @param expressionMeasure measure present in the expression * @param ordinalToBlockIndexMapping measure ordinal to block mapping * @return block indexes */ public static int[] getMeasureChunkIndexes(List<ProjectionMeasure> queryMeasures, List<CarbonMeasure> expressionMeasure, Map<Integer, Integer> ordinalToBlockIndexMapping, Set<CarbonMeasure> filterMeasures, List<Integer> allProjectionListMeasureIdexes) { Set<Integer> measureChunkIndex = new HashSet<Integer>(); Set<Integer> filterMeasureOrdinal = getFilterMeasureOrdinal(filterMeasures); for (int i = 0; i < queryMeasures.size(); i++) { Integer measureOrdinal = queryMeasures.get(i).getMeasure().getOrdinal(); allProjectionListMeasureIdexes.add(measureOrdinal); if (!filterMeasureOrdinal.contains(measureOrdinal)) { measureChunkIndex.add(ordinalToBlockIndexMapping.get(measureOrdinal)); } } for (int i = 0; i < expressionMeasure.size(); i++) { measureChunkIndex.add(ordinalToBlockIndexMapping.get(expressionMeasure.get(i).getOrdinal())); } int[] measureIndexes = ArrayUtils.toPrimitive(measureChunkIndex.toArray(new Integer[measureChunkIndex.size()])); Arrays.sort(measureIndexes); return measureIndexes; }
/** * This method will initialize the measure info for the current block to be * used for filtering the data */ private void initMeasureChunkIndexes() { for (int i = 0; i < msrColEvalutorInfoList.size(); i++) { // find the measure in the current block measures list CarbonMeasure measureFromCurrentBlock = segmentProperties.getMeasureFromCurrentBlock( msrColEvalutorInfoList.get(i).getCarbonColumn().getColumnId()); if (null != measureFromCurrentBlock) { msrColEvalutorInfoList.get(i).setColumnIndex(measureFromCurrentBlock.getOrdinal()); this.measureChunkIndex[i] = msrColEvalutorInfoList.get(i).getColumnIndexInMinMaxByteArray(); isMeasurePresentInCurrentBlock[i] = true; } } }
@Override public boolean applyFilter(RowIntf value, int dimOrdinalMax) throws FilterUnsupportedException, IOException { if (isDimensionPresentInCurrentBlock[0]) { byte[] col = (byte[]) value.getVal(dimColEvaluatorInfoList.get(0).getDimension().getOrdinal()); return ByteUtil.compare(filterRangeValues[0], col) <= 0; } if (isMeasurePresentInCurrentBlock[0]) { Object col = value.getVal(msrColEvalutorInfoList.get(0).getMeasure().getOrdinal() + dimOrdinalMax); return comparator.compare(msrFilterRangeValues[0], col) <= 0; } return false; }
@Override public boolean applyFilter(RowIntf value, int dimOrdinalMax) throws FilterUnsupportedException, IOException { if (isDimensionPresentInCurrentBlock[0]) { byte[] col = (byte[]) value.getVal(dimColEvaluatorInfoList.get(0).getDimension().getOrdinal()); return ByteUtil.compare(filterRangeValues[0], col) < 0; } if (isMeasurePresentInCurrentBlock[0]) { Object col = value.getVal(msrColEvalutorInfoList.get(0).getMeasure().getOrdinal() + dimOrdinalMax); return comparator.compare(msrFilterRangeValues[0], col) < 0; } return false; }
@Override public boolean applyFilter(RowIntf value, int dimOrdinalMax) throws FilterUnsupportedException, IOException { if (isDimensionPresentInCurrentBlock[0]) { byte[] col = (byte[]) value.getVal(dimColEvaluatorInfoList.get(0).getDimension().getOrdinal()); return ByteUtil.compare(filterRangeValues[0], col) > 0; } if (isMeasurePresentInCurrentBlock[0]) { Object col = value.getVal(msrColEvalutorInfoList.get(0).getMeasure().getOrdinal() + dimOrdinalMax); return comparator.compare(msrFilterRangeValues[0], col) > 0; } return false; }
@Override public boolean applyFilter(RowIntf value, int dimOrdinalMax) throws FilterUnsupportedException, IOException { if (isDimensionPresentInCurrentBlock[0]) { byte[] col = (byte[]) value.getVal(dimColEvaluatorInfoList.get(0).getDimension().getOrdinal()); return ByteUtil.compare(filterRangeValues[0], col) >= 0; } if (isMeasurePresentInCurrentBlock[0]) { Object col = value.getVal(msrColEvalutorInfoList.get(0).getMeasure().getOrdinal() + dimOrdinalMax); return comparator.compare(msrFilterRangeValues[0], col) >= 0; } return false; }
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());
columnVectorInfo.measureVectorFiller = MeasureDataVectorProcessor.MeasureVectorFillerFactory .getMeasureVectorFiller(queryMeasures[i].getMeasure().getDataType()); columnVectorInfo.ordinal = queryMeasures[i].getMeasure().getOrdinal(); columnVectorInfo.measure = queryMeasures[i]; this.measureColumnInfo[j++] = columnVectorInfo;
public void populateFilterInfoBasedOnColumnType(ResolvedFilterInfoVisitorIntf visitor, FilterResolverMetadata metadata) throws FilterUnsupportedException, IOException { if (null != visitor) { visitor.populateFilterResolvedInfo(this, metadata); this.addMeasureResolvedFilterInstance(metadata.getColumnExpression().getMeasure(), this.getFilterValues()); this.setMeasure(metadata.getColumnExpression().getMeasure()); this.setColumnIndex(metadata.getColumnExpression().getMeasure().getOrdinal()); } }
@Override public boolean applyFilter(RowIntf value, int dimOrdinalMax) { if (isDimensionPresentInCurrentBlock) { byte[][] filterValues = dimColumnExecuterInfo.getExcludeFilterKeys(); byte[] col = (byte[])value.getVal(dimColEvaluatorInfo.getDimension().getOrdinal()); for (int i = 0; i < filterValues.length; i++) { if (0 == ByteUtil.UnsafeComparer.INSTANCE.compareTo(col, 0, col.length, filterValues[i], 0, filterValues[i].length)) { return false; } } } else if (isMeasurePresentInCurrentBlock) { Object[] filterValues = msrColumnExecutorInfo.getFilterKeys(); Object col = value.getVal(msrColumnEvaluatorInfo.getMeasure().getOrdinal() + dimOrdinalMax); for (int i = 0; i < filterValues.length; i++) { if (filterValues[i] == null) { if (null == col) { return false; } continue; } if (comparator.compare(col, filterValues[i]) == 0) { return false; } } } return true; }
currentBlockMeasure.setOrdinal(queryMeasure.getOrdinal()); presentMeasure.add(currentBlockMeasure); measureOrdinalList.add(carbonMeasure.getOrdinal()); measureExistsInCurrentBlock[index] = true; break;
@Override public boolean applyFilter(RowIntf value, int dimOrdinalMax) { if (isDimensionPresentInCurrentBlock) { byte[][] filterValues = dimColumnExecuterInfo.getFilterKeys(); byte[] col = (byte[])value.getVal(dimColumnEvaluatorInfo.getDimension().getOrdinal()); for (int i = 0; i < filterValues.length; i++) { if (0 == ByteUtil.UnsafeComparer.INSTANCE.compareTo(col, 0, col.length, filterValues[i], 0, filterValues[i].length)) { return true; } } } else if (isMeasurePresentInCurrentBlock) { Object[] filterValues = msrColumnExecutorInfo.getFilterKeys(); Object col = value.getVal(msrColumnEvaluatorInfo.getMeasure().getOrdinal() + dimOrdinalMax); for (int i = 0; i < filterValues.length; i++) { if (filterValues[i] == null) { if (null == col) { return true; } continue; } if (comparator.compare(col, filterValues[i]) == 0) { return true; } } } return false; }
int index = msrColumnEvalutorInfo.getMeasure().getOrdinal() + dimOrdinalMax;
col.setMeasure(true); if (null != isFilterMeasures) { isFilterMeasures[msr.getOrdinal()] = true;
msrColResolvedFilterInfo.getCopyObject(); msrColResolvedFilterInfoCopyObject.setMeasure(measuresFromCurrentBlock); msrColResolvedFilterInfoCopyObject.setColumnIndex(measuresFromCurrentBlock.getOrdinal()); msrColResolvedFilterInfoCopyObject.setType(measuresFromCurrentBlock.getDataType()); return new ExcludeFilterExecuterImpl(null, msrColResolvedFilterInfoCopyObject,
msrColResolvedFilterInfo.getCopyObject(); msrColResolvedFilterInfoCopyObject.setMeasure(measuresFromCurrentBlock); msrColResolvedFilterInfoCopyObject.setColumnIndex(measuresFromCurrentBlock.getOrdinal()); msrColResolvedFilterInfoCopyObject.setType(measuresFromCurrentBlock.getDataType()); return new IncludeFilterExecuterImpl(null, msrColResolvedFilterInfoCopyObject,