/** * Method to get the list of sort columns * * @param tableName * @return List of Sort column */ public List<String> getSortColumns(String tableName) { List<String> sort_columsList = new ArrayList<String>(allDimensions.size()); List<CarbonDimension> carbonDimensions = tableDimensionsMap.get(tableName); for (CarbonDimension dim : carbonDimensions) { if (dim.isSortColumn()) { sort_columsList.add(dim.getColName()); } } return sort_columsList; }
/** * Get the no dictionary data types on the table * * @param carbonTable * @return */ public static DataType[] getNoDictDataTypes(CarbonTable carbonTable) { List<CarbonDimension> dimensions = carbonTable.getDimensionByTableName(carbonTable.getTableName()); List<DataType> type = new ArrayList<>(); for (int i = 0; i < dimensions.size(); i++) { if (dimensions.get(i).isSortColumn() && !dimensions.get(i).hasEncoding(Encoding.DICTIONARY)) { type.add(dimensions.get(i).getDataType()); } } return type.toArray(new DataType[type.size()]); }
/** * Get the no dictionary sort column mapping of the table * * @param carbonTable * @return */ public static boolean[] getNoDictSortColMapping(CarbonTable carbonTable) { List<CarbonDimension> dimensions = carbonTable.getDimensionByTableName(carbonTable.getTableName()); List<Boolean> noDicSortColMap = new ArrayList<>(); for (int i = 0; i < dimensions.size(); i++) { if (dimensions.get(i).isSortColumn()) { if (!dimensions.get(i).hasEncoding(Encoding.DICTIONARY)) { noDicSortColMap.add(true); } else { noDicSortColMap.add(false); } } } Boolean[] mapping = noDicSortColMap.toArray(new Boolean[noDicSortColMap.size()]); boolean[] noDicSortColMapping = new boolean[mapping.length]; for (int i = 0; i < mapping.length; i++) { noDicSortColMapping[i] = mapping[i].booleanValue(); } return noDicSortColMapping; }
/** * Get the data types of the no dictionary sort columns * * @param carbonTable * @return */ public static Map<String, DataType[]> getNoDictSortAndNoSortDataTypes(CarbonTable carbonTable) { List<CarbonDimension> dimensions = carbonTable.getDimensionByTableName(carbonTable.getTableName()); List<DataType> noDictSortType = new ArrayList<>(); List<DataType> noDictNoSortType = new ArrayList<>(); for (int i = 0; i < dimensions.size(); i++) { if (!dimensions.get(i).hasEncoding(Encoding.DICTIONARY)) { if (dimensions.get(i).isSortColumn()) { noDictSortType.add(dimensions.get(i).getDataType()); } else { noDictNoSortType.add(dimensions.get(i).getDataType()); } } } DataType[] noDictSortTypes = noDictSortType.toArray(new DataType[noDictSortType.size()]); DataType[] noDictNoSortTypes = noDictNoSortType.toArray(new DataType[noDictNoSortType.size()]); Map<String, DataType[]> noDictSortAndNoSortTypes = new HashMap<>(2); noDictSortAndNoSortTypes.put("noDictSortDataTypes", noDictSortTypes); noDictSortAndNoSortTypes.put("noDictNoSortDataTypes", noDictNoSortTypes); return noDictSortAndNoSortTypes; }
DimensionSpec(ColumnType columnType, CarbonDimension dimension) { super(dimension.getColName(), dimension.getDataType(), columnType); this.inSortColumns = dimension.isSortColumn(); this.doInvertedIndex = dimension.isUseInvertedIndex(); }
public RowLevelRangeLessThanEqualFilterExecuterImpl( List<DimColumnResolvedFilterInfo> dimColEvaluatorInfoList, List<MeasureColumnResolvedFilterInfo> msrColEvalutorInfoList, Expression exp, AbsoluteTableIdentifier tableIdentifier, byte[][] filterRangeValues, Object[] msrFilterRangeValues, SegmentProperties segmentProperties) { super(dimColEvaluatorInfoList, msrColEvalutorInfoList, exp, tableIdentifier, segmentProperties, null); this.filterRangeValues = filterRangeValues; this.msrFilterRangeValues = msrFilterRangeValues; if (!msrColEvalutorInfoList.isEmpty()) { CarbonMeasure measure = this.msrColEvalutorInfoList.get(0).getMeasure(); comparator = Comparator.getComparatorByDataTypeForMeasure(measure.getDataType()); } ifDefaultValueMatchesFilter(); if (isDimensionPresentInCurrentBlock[0]) { isNaturalSorted = dimColEvaluatorInfoList.get(0).getDimension().isUseInvertedIndex() && dimColEvaluatorInfoList.get(0).getDimension().isSortColumn(); } }
RowLevelRangeGrtrThanEquaToFilterExecuterImpl( List<DimColumnResolvedFilterInfo> dimColEvaluatorInfoList, List<MeasureColumnResolvedFilterInfo> msrColEvalutorInfoList, Expression exp, AbsoluteTableIdentifier tableIdentifier, byte[][] filterRangeValues, Object[] msrFilterRangeValues, SegmentProperties segmentProperties) { super(dimColEvaluatorInfoList, msrColEvalutorInfoList, exp, tableIdentifier, segmentProperties, null); this.filterRangeValues = filterRangeValues; this.msrFilterRangeValues = msrFilterRangeValues; if (!msrColEvalutorInfoList.isEmpty()) { CarbonMeasure measure = this.msrColEvalutorInfoList.get(0).getMeasure(); comparator = Comparator.getComparatorByDataTypeForMeasure(measure.getDataType()); } if (isDimensionPresentInCurrentBlock[0] == true) { isNaturalSorted = dimColEvaluatorInfoList.get(0).getDimension().isUseInvertedIndex() && dimColEvaluatorInfoList.get(0).getDimension().isSortColumn(); } ifDefaultValueMatchesFilter(); }
public RowLevelRangeLessThanFilterExecuterImpl( List<DimColumnResolvedFilterInfo> dimColEvaluatorInfoList, List<MeasureColumnResolvedFilterInfo> msrColEvalutorInfoList, Expression exp, AbsoluteTableIdentifier tableIdentifier, byte[][] filterRangeValues, Object[] msrFilterRangeValues, SegmentProperties segmentProperties) { super(dimColEvaluatorInfoList, msrColEvalutorInfoList, exp, tableIdentifier, segmentProperties, null); this.filterRangeValues = filterRangeValues; this.msrFilterRangeValues = msrFilterRangeValues; if (!msrColEvalutorInfoList.isEmpty()) { CarbonMeasure measure = this.msrColEvalutorInfoList.get(0).getMeasure(); comparator = Comparator.getComparatorByDataTypeForMeasure(measure.getDataType()); } ifDefaultValueMatchesFilter(); if (isDimensionPresentInCurrentBlock[0]) { isNaturalSorted = dimColEvaluatorInfoList.get(0).getDimension().isUseInvertedIndex() && dimColEvaluatorInfoList.get(0).getDimension().isSortColumn(); } }
RowLevelRangeGrtThanFiterExecuterImpl(List<DimColumnResolvedFilterInfo> dimColEvaluatorInfoList, List<MeasureColumnResolvedFilterInfo> msrColEvalutorInfoList, Expression exp, AbsoluteTableIdentifier tableIdentifier, byte[][] filterRangeValues, Object[] msrFilterRangeValues, SegmentProperties segmentProperties) { super(dimColEvaluatorInfoList, msrColEvalutorInfoList, exp, tableIdentifier, segmentProperties, null); this.filterRangeValues = filterRangeValues; this.msrFilterRangeValues = msrFilterRangeValues; if (!this.msrColEvalutorInfoList.isEmpty()) { CarbonMeasure measure = this.msrColEvalutorInfoList.get(0).getMeasure(); comparator = Comparator.getComparatorByDataTypeForMeasure(measure.getDataType()); } if (isDimensionPresentInCurrentBlock[0]) { isNaturalSorted = dimColEvaluatorInfoList.get(0).getDimension().isUseInvertedIndex() && dimColEvaluatorInfoList.get(0).getDimension().isSortColumn(); } ifDefaultValueMatchesFilter(); }
int i = 0; for (CarbonDimension dimension : dimensions) { if (dimension.isSortColumn()) { sortColumnMapping[i] = true;
/** * This method is used to get default null values for a direct dictionary column * @param currentBlockDimension * @param segmentProperties * @return */ public static byte[] getDefaultNullValue(CarbonDimension currentBlockDimension, SegmentProperties segmentProperties) { byte[] defaultValue = null; DirectDictionaryGenerator directDictionaryGenerator = DirectDictionaryKeyGeneratorFactory .getDirectDictionaryGenerator(currentBlockDimension.getDataType()); int key = directDictionaryGenerator.generateDirectSurrogateKey(null); if (currentBlockDimension.isSortColumn()) { defaultValue = FilterUtil .getMaskKey(key, currentBlockDimension, segmentProperties.getSortColumnsGenerator()); } else { defaultValue = ByteUtil.toXorBytes(key); } return defaultValue; }
public RangeValueFilterExecuterImpl(DimColumnResolvedFilterInfo dimColEvaluatorInfo, Expression exp, byte[][] filterRangeValues, SegmentProperties segmentProperties) { this.dimColEvaluatorInfo = dimColEvaluatorInfo; this.exp = exp; this.segmentProperties = segmentProperties; this.filterRangesValues = filterRangeValues; this.lessThanExp = isLessThan(); this.lessThanEqualExp = isLessThanEqualTo(); this.greaterThanExp = isGreaterThan(); this.greaterThanEqualExp = isGreaterThanEqualTo(); startBlockMinIsDefaultStart = false; endBlockMaxisDefaultEnd = false; isRangeFullyCoverBlock = false; initDimensionChunkIndexes(); ifDefaultValueMatchesFilter(); if (isDimensionPresentInCurrentBlock) { isNaturalSorted = dimColEvaluatorInfo.getDimension().isUseInvertedIndex() && dimColEvaluatorInfo.getDimension().isSortColumn(); } }
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; } }