use of org.apache.carbondata.core.scan.executor.infos.KeyStructureInfo in project carbondata by apache.
the class QueryUtil method getColumnGroupKeyStructureInfo.
/**
* Below method will be used to get the mapping of block index and its
* restructuring info
*
* @param queryDimensions query dimension from query model
* @param segmentProperties segment properties
* @return map of block index to its restructuring info
* @throws KeyGenException if problem while key generation
*/
public static Map<Integer, KeyStructureInfo> getColumnGroupKeyStructureInfo(List<QueryDimension> queryDimensions, SegmentProperties segmentProperties) throws KeyGenException {
Map<Integer, KeyStructureInfo> rowGroupToItsRSInfo = new HashMap<Integer, KeyStructureInfo>();
// get column group id and its ordinal mapping of column group
Map<Integer, List<Integer>> columnGroupAndItsOrdinalMappingForQuery = getColumnGroupAndItsOrdinalMapping(queryDimensions);
Map<Integer, KeyGenerator> columnGroupAndItsKeygenartor = segmentProperties.getColumnGroupAndItsKeygenartor();
Iterator<Entry<Integer, List<Integer>>> iterator = columnGroupAndItsOrdinalMappingForQuery.entrySet().iterator();
KeyStructureInfo restructureInfos = null;
while (iterator.hasNext()) {
Entry<Integer, List<Integer>> next = iterator.next();
KeyGenerator keyGenerator = columnGroupAndItsKeygenartor.get(next.getKey());
restructureInfos = new KeyStructureInfo();
// sort the ordinal
List<Integer> ordinal = next.getValue();
List<Integer> mdKeyOrdinal = new ArrayList<Integer>();
//Un sorted
List<Integer> mdKeyOrdinalForQuery = new ArrayList<Integer>();
for (Integer ord : ordinal) {
mdKeyOrdinal.add(segmentProperties.getColumnGroupMdKeyOrdinal(next.getKey(), ord));
mdKeyOrdinalForQuery.add(segmentProperties.getColumnGroupMdKeyOrdinal(next.getKey(), ord));
}
Collections.sort(mdKeyOrdinal);
// get the masked byte range for column group
int[] maskByteRanges = getMaskedByteRangeBasedOrdinal(mdKeyOrdinal, keyGenerator);
// max key for column group
byte[] maxKey = getMaxKeyBasedOnOrinal(mdKeyOrdinal, keyGenerator);
restructureInfos.setKeyGenerator(keyGenerator);
restructureInfos.setMaskByteRanges(maskByteRanges);
restructureInfos.setMaxKey(maxKey);
restructureInfos.setMdkeyQueryDimensionOrdinal(ArrayUtils.toPrimitive(mdKeyOrdinalForQuery.toArray(new Integer[mdKeyOrdinalForQuery.size()])));
rowGroupToItsRSInfo.put(segmentProperties.getDimensionOrdinalToBlockMapping().get(ordinal.get(0)), restructureInfos);
}
return rowGroupToItsRSInfo;
}
use of org.apache.carbondata.core.scan.executor.infos.KeyStructureInfo in project carbondata by apache.
the class QueryUtil method getKeyStructureInfo.
/**
* Below method will be used to get the key structure for the column group
*
* @param segmentProperties segment properties
* @param dimColumnEvaluatorInfo dimension evaluator info
* @return key structure info for column group dimension
* @throws KeyGenException
*/
public static KeyStructureInfo getKeyStructureInfo(SegmentProperties segmentProperties, DimColumnResolvedFilterInfo dimColumnEvaluatorInfo) throws KeyGenException {
int colGrpId = getColumnGroupId(segmentProperties, dimColumnEvaluatorInfo.getColumnIndex());
KeyGenerator keyGenerator = segmentProperties.getColumnGroupAndItsKeygenartor().get(colGrpId);
List<Integer> mdKeyOrdinal = new ArrayList<Integer>();
mdKeyOrdinal.add(segmentProperties.getColumnGroupMdKeyOrdinal(colGrpId, dimColumnEvaluatorInfo.getColumnIndex()));
int[] maskByteRanges = QueryUtil.getMaskedByteRangeBasedOrdinal(mdKeyOrdinal, keyGenerator);
byte[] maxKey = QueryUtil.getMaxKeyBasedOnOrinal(mdKeyOrdinal, keyGenerator);
KeyStructureInfo restructureInfos = new KeyStructureInfo();
restructureInfos.setKeyGenerator(keyGenerator);
restructureInfos.setMaskByteRanges(maskByteRanges);
restructureInfos.setMaxKey(maxKey);
return restructureInfos;
}
Aggregations