@Override public BitSet isFilterValuesPresentInBlockOrBlocklet(byte[][] maxValue, byte[][] minValue, String uniqueBlockPath, boolean[] isMinMaxSet) { BitSet bitSet = new BitSet(1); boolean isScanRequired = false; String shortBlockId = CarbonTablePath.getShortBlockId(uniqueBlockPath); if (uniqueBlockPath.endsWith(".carbondata")) { if (dimColumnEvaluatorInfo.getFilterValues().getImplicitDriverColumnFilterList() .contains(shortBlockId)) { isScanRequired = true; } } else if (dimColumnEvaluatorInfo.getFilterValues().getImplicitColumnFilterList() .contains(shortBlockId)) { isScanRequired = true; } if (isScanRequired) { bitSet.set(0); } return bitSet; }
/** * This method will return the filter values which is present in the range level * conditional expressions. * * @return */ public byte[][] getFilterRangeValues(SegmentProperties segmentProperties) { if (null != dimColResolvedFilterInfo.getFilterValues() && !dimColResolvedFilterInfo .getDimension().hasEncoding(Encoding.DICTIONARY)) { List<byte[]> noDictFilterValuesList = dimColResolvedFilterInfo.getFilterValues().getNoDictionaryFilterValuesList(); return noDictFilterValuesList.toArray((new byte[noDictFilterValuesList.size()][])); } else if (null != dimColResolvedFilterInfo.getFilterValues() && dimColResolvedFilterInfo .getDimension().hasEncoding(Encoding.DIRECT_DICTIONARY)) { return FilterUtil.getKeyArray(this.dimColResolvedFilterInfo.getFilterValues(), this.dimColResolvedFilterInfo.getDimension(), segmentProperties, false); } return null; }
/** * This method will return the filter values which is present in the range level * conditional expressions. * * @return */ public byte[][] getFilterRangeValues(SegmentProperties segmentProperties) { if (dimColEvaluatorInfoList.size() > 0 && null != dimColEvaluatorInfoList.get(0) .getFilterValues() && !dimColEvaluatorInfoList.get(0).getDimension() .hasEncoding(Encoding.DICTIONARY)) { List<byte[]> noDictFilterValuesList = dimColEvaluatorInfoList.get(0).getFilterValues().getNoDictionaryFilterValuesList(); return noDictFilterValuesList.toArray((new byte[noDictFilterValuesList.size()][])); } else if (dimColEvaluatorInfoList.size() > 0 && null != dimColEvaluatorInfoList.get(0) .getFilterValues() && dimColEvaluatorInfoList.get(0).getDimension() .hasEncoding(Encoding.DIRECT_DICTIONARY)) { CarbonDimension dimensionFromCurrentBlock = segmentProperties .getDimensionFromCurrentBlock(this.dimColEvaluatorInfoList.get(0).getDimension()); if (null != dimensionFromCurrentBlock) { return FilterUtil.getKeyArray(this.dimColEvaluatorInfoList.get(0).getFilterValues(), dimensionFromCurrentBlock, segmentProperties, false); } else { return FilterUtil.getKeyArray(this.dimColEvaluatorInfoList.get(0).getFilterValues(), false); } } return null; }
DimColumnResolvedFilterInfo dimColumnEvaluatorInfo) { boolean isDefaultValuePresentInFilterValues = false; ColumnFilterInfo filterValues = dimColumnEvaluatorInfo.getFilterValues(); CarbonDimension dimension = dimColumnEvaluatorInfo.getDimension(); byte[] defaultValue = dimension.getDefaultValue();
public void populateFilterInfoBasedOnColumnType(ResolvedFilterInfoVisitorIntf visitor, FilterResolverMetadata metadata) throws FilterUnsupportedException, IOException { if (null != visitor) { visitor.populateFilterResolvedInfo(this, metadata); this.addDimensionResolvedFilterInstance(metadata.getColumnExpression().getDimension(), this.getFilterValues()); this.setDimension(metadata.getColumnExpression().getDimension()); this.setColumnIndex(metadata.getColumnExpression().getDimension().getOrdinal()); } }
public ExcludeFilterExecuterImpl(DimColumnResolvedFilterInfo dimColEvaluatorInfo, MeasureColumnResolvedFilterInfo msrColumnEvaluatorInfo, SegmentProperties segmentProperties, boolean isMeasure) { this.segmentProperties = segmentProperties; if (!isMeasure) { this.dimColEvaluatorInfo = dimColEvaluatorInfo; dimColumnExecuterInfo = new DimColumnExecuterFilterInfo(); FilterUtil.prepareKeysFromSurrogates(dimColEvaluatorInfo.getFilterValues(), segmentProperties, dimColEvaluatorInfo.getDimension(), dimColumnExecuterInfo, null, null); isDimensionPresentInCurrentBlock = true; isNaturalSorted = dimColEvaluatorInfo.getDimension().isUseInvertedIndex() && dimColEvaluatorInfo .getDimension().isSortColumn(); } else { this.msrColumnEvaluatorInfo = msrColumnEvaluatorInfo; msrColumnExecutorInfo = new MeasureColumnExecuterFilterInfo(); FilterUtil .prepareKeysFromSurrogates(msrColumnEvaluatorInfo.getFilterValues(), segmentProperties, null, null, msrColumnEvaluatorInfo.getMeasure(), msrColumnExecutorInfo); isMeasurePresentInCurrentBlock = true; DataType msrType = FilterUtil.getMeasureDataType(msrColumnEvaluatorInfo); comparator = Comparator.getComparatorByDataTypeForMeasure(msrType); } }
public IncludeFilterExecuterImpl(DimColumnResolvedFilterInfo dimColumnEvaluatorInfo, MeasureColumnResolvedFilterInfo msrColumnEvaluatorInfo, SegmentProperties segmentProperties, boolean isMeasure) { this.segmentProperties = segmentProperties; if (!isMeasure) { this.dimColumnEvaluatorInfo = dimColumnEvaluatorInfo; dimColumnExecuterInfo = new DimColumnExecuterFilterInfo(); FilterUtil .prepareKeysFromSurrogates(dimColumnEvaluatorInfo.getFilterValues(), segmentProperties, dimColumnEvaluatorInfo.getDimension(), dimColumnExecuterInfo, null, null); isDimensionPresentInCurrentBlock = true; isNaturalSorted = dimColumnEvaluatorInfo.getDimension().isUseInvertedIndex() && dimColumnEvaluatorInfo .getDimension().isSortColumn(); } else { this.msrColumnEvaluatorInfo = msrColumnEvaluatorInfo; msrColumnExecutorInfo = new MeasureColumnExecuterFilterInfo(); comparator = Comparator.getComparatorByDataTypeForMeasure( FilterUtil.getMeasureDataType(msrColumnEvaluatorInfo)); FilterUtil .prepareKeysFromSurrogates(msrColumnEvaluatorInfo.getFilterValues(), segmentProperties, null, null, msrColumnEvaluatorInfo.getMeasure(), msrColumnExecutorInfo); isMeasurePresentInCurrentBlock = true; } }
if (null != filterExpressionResolverTree.getDimColResolvedFilterInfo() && null != filterExpressionResolverTree.getDimColResolvedFilterInfo() .getFilterValues() && filterExpressionResolverTree.getDimColResolvedFilterInfo() .getFilterValues().isOptimized()) { return getExcludeFilterExecuter( filterExpressionResolverTree.getDimColResolvedFilterInfo(),