Search in sources :

Example 11 with KeyStructureInfo

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;
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Entry(java.util.Map.Entry) KeyStructureInfo(org.apache.carbondata.core.scan.executor.infos.KeyStructureInfo) ArrayList(java.util.ArrayList) List(java.util.List) KeyGenerator(org.apache.carbondata.core.keygenerator.KeyGenerator)

Example 12 with KeyStructureInfo

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;
}
Also used : KeyStructureInfo(org.apache.carbondata.core.scan.executor.infos.KeyStructureInfo) ArrayList(java.util.ArrayList) KeyGenerator(org.apache.carbondata.core.keygenerator.KeyGenerator)

Aggregations

KeyStructureInfo (org.apache.carbondata.core.scan.executor.infos.KeyStructureInfo)12 ArrayList (java.util.ArrayList)6 KeyGenException (org.apache.carbondata.core.keygenerator.KeyGenException)4 KeyGenerator (org.apache.carbondata.core.keygenerator.KeyGenerator)4 Test (org.junit.Test)4 BitSet (java.util.BitSet)2 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Entry (java.util.Map.Entry)1