Search in sources :

Example 1 with KeyStructureInfo

use of org.apache.carbondata.core.scan.executor.infos.KeyStructureInfo in project carbondata by apache.

the class ExcludeColGroupFilterExecuterImpl method getKeyStructureInfo.

/**
   * It is required for extracting column data from columngroup chunk
   *
   * @return
   * @throws KeyGenException
   */
private KeyStructureInfo getKeyStructureInfo() throws KeyGenException {
    int colGrpId = getColumnGroupId(dimColEvaluatorInfo.getColumnIndex());
    KeyGenerator keyGenerator = segmentProperties.getColumnGroupAndItsKeygenartor().get(colGrpId);
    List<Integer> mdKeyOrdinal = new ArrayList<Integer>();
    mdKeyOrdinal.add(getMdkeyOrdinal(dimColEvaluatorInfo.getColumnIndex(), colGrpId));
    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)

Example 2 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<ProjectionDimension> 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.getDimensionOrdinalToChunkMapping().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 3 with KeyStructureInfo

use of org.apache.carbondata.core.scan.executor.infos.KeyStructureInfo in project carbondata by apache.

the class RowLevelFilterExecuterImpl method readSurrogatesFromColumnGroupBlock.

/**
 * @param index
 * @param dimColumnEvaluatorInfo
 * @return read surrogate of given row of given column group dimension
 */
private int readSurrogatesFromColumnGroupBlock(DimensionColumnPage chunk, int index, DimColumnResolvedFilterInfo dimColumnEvaluatorInfo) {
    try {
        KeyStructureInfo keyStructureInfo = QueryUtil.getKeyStructureInfo(segmentProperties, dimColumnEvaluatorInfo);
        byte[] colData = chunk.getChunkData(index);
        long[] result = keyStructureInfo.getKeyGenerator().getKeyArray(colData);
        int colGroupId = QueryUtil.getColumnGroupId(segmentProperties, dimensionChunkIndex[0]);
        return (int) result[segmentProperties.getColumnGroupMdKeyOrdinal(colGroupId, dimensionChunkIndex[0])];
    } catch (KeyGenException e) {
        LOGGER.error(e);
    }
    return 0;
}
Also used : KeyStructureInfo(org.apache.carbondata.core.scan.executor.infos.KeyStructureInfo) KeyGenException(org.apache.carbondata.core.keygenerator.KeyGenException)

Example 4 with KeyStructureInfo

use of org.apache.carbondata.core.scan.executor.infos.KeyStructureInfo in project carbondata by apache.

the class FixedLengthDimensionDataChunkTest method fillConvertedChunkDataTest.

@Test
public void fillConvertedChunkDataTest() {
    int[] row = { 1, 2, 4, 6 };
    KeyStructureInfo keyStructureInfo = new KeyStructureInfo();
    int res = fixedLengthDimensionDataChunk.fillSurrogateKey(1, 0, row, keyStructureInfo);
    int expectedResult = 1;
    assertEquals(res, expectedResult);
}
Also used : KeyStructureInfo(org.apache.carbondata.core.scan.executor.infos.KeyStructureInfo) Test(org.junit.Test)

Example 5 with KeyStructureInfo

use of org.apache.carbondata.core.scan.executor.infos.KeyStructureInfo in project carbondata by apache.

the class FixedLengthDimensionDataChunkTest method fillChunkDataTest.

@Test
public void fillChunkDataTest() {
    KeyStructureInfo keyStructureInfo = new KeyStructureInfo();
    int[] maskByteRanges = { 1, 2, 4, 6, 5 };
    keyStructureInfo.setMaskByteRanges(maskByteRanges);
    keyStructureInfo.setMaxKey("1234567".getBytes());
    int res = fixedLengthDimensionDataChunk.fillRawData(0, 0, data, keyStructureInfo);
    int expectedResult = 4;
    assertEquals(res, expectedResult);
}
Also used : KeyStructureInfo(org.apache.carbondata.core.scan.executor.infos.KeyStructureInfo) Test(org.junit.Test)

Aggregations

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