public boolean isGlobalDictionaryEncoding() { return getEncoder().contains(Encoding.DICTIONARY); }
public boolean isDirectDictionaryEncoding() { return getEncoder().contains(Encoding.DIRECT_DICTIONARY); }
private static List<CarbonDimension> getCarbonDimsMappedToKeyGenerator( List<CarbonDimension> carbonDimensions) { List<CarbonDimension> listOfCarbonDimPartOfKeyGen = new ArrayList<CarbonDimension>(carbonDimensions.size()); for (CarbonDimension carbonDim : carbonDimensions) { if (CarbonUtil.hasEncoding(carbonDim.getEncoder(), Encoding.DICTIONARY) || CarbonUtil .hasEncoding(carbonDim.getEncoder(), Encoding.DIRECT_DICTIONARY)) { listOfCarbonDimPartOfKeyGen.add(carbonDim); } } return listOfCarbonDimPartOfKeyGen; }
private static void fillDefaultEndValue(SortedMap<Integer, byte[]> setOfEndKeyByteArray, SegmentProperties segmentProperties) { List<CarbonDimension> allDimension = segmentProperties.getDimensions(); for (CarbonDimension dimension : allDimension) { if (CarbonUtil.hasEncoding(dimension.getEncoder(), Encoding.DICTIONARY)) { continue; } setOfEndKeyByteArray.put(dimension.getOrdinal(), new byte[] { (byte) 0xFF }); } }
/** * Below method will be used to get the dimension * * @param tableDimensionList table dimension list * @return boolean array specifying true if dimension is dictionary * and false if dimension is not a dictionary column */ public static boolean[] identifyDimensionType(List<CarbonDimension> tableDimensionList) { List<Boolean> isDictionaryDimensions = new ArrayList<Boolean>(); for (CarbonDimension carbonDimension : tableDimensionList) { List<CarbonDimension> childs = carbonDimension.getListOfChildDimensions(); //assuming complex dimensions will always be atlast if (null != childs && childs.size() > 0) { break; } if (hasEncoding(carbonDimension.getEncoder(), Encoding.DICTIONARY)) { isDictionaryDimensions.add(true); } else { isDictionaryDimensions.add(false); } } return ArrayUtils .toPrimitive(isDictionaryDimensions.toArray(new Boolean[isDictionaryDimensions.size()])); }
private static void fillNullValuesStartIndexWithDefaultKeys( SortedMap<Integer, byte[]> setOfStartKeyByteArray, SegmentProperties segmentProperties) { List<CarbonDimension> allDimension = segmentProperties.getDimensions(); for (CarbonDimension dimension : allDimension) { if (CarbonUtil.hasEncoding(dimension.getEncoder(), Encoding.DICTIONARY)) { continue; } if (null == setOfStartKeyByteArray.get(dimension.getOrdinal())) { setOfStartKeyByteArray.put(dimension.getOrdinal(), new byte[] { 0 }); } } }
private static void fillDefaultStartValue(SortedMap<Integer, byte[]> setOfStartKeyByteArray, SegmentProperties segmentProperties) { List<CarbonDimension> allDimension = segmentProperties.getDimensions(); for (CarbonDimension dimension : allDimension) { if (CarbonUtil.hasEncoding(dimension.getEncoder(), Encoding.DICTIONARY)) { continue; } setOfStartKeyByteArray.put(dimension.getOrdinal(), new byte[] { 0 }); } }
private static void fillNullValuesEndIndexWithDefaultKeys( SortedMap<Integer, byte[]> setOfStartKeyByteArray, SegmentProperties segmentProperties) { List<CarbonDimension> allDimension = segmentProperties.getDimensions(); for (CarbonDimension dimension : allDimension) { if (CarbonUtil.hasEncoding(dimension.getEncoder(), Encoding.DICTIONARY)) { continue; } if (null == setOfStartKeyByteArray.get(dimension.getOrdinal())) { setOfStartKeyByteArray.put(dimension.getOrdinal(), new byte[] { (byte) 0xFF }); } } }
/** * Below method will be used to fill the children dimension column id */ private static void getChildDimensionOrdinal(CarbonDimension queryDimensions, Set<Integer> filterDimensionsOrdinal) { for (int j = 0; j < queryDimensions.getNumberOfChild(); j++) { List<Encoding> encodingList = queryDimensions.getListOfChildDimensions().get(j).getEncoder(); if (queryDimensions.getListOfChildDimensions().get(j).getNumberOfChild() > 0) { getChildDimensionOrdinal(queryDimensions.getListOfChildDimensions().get(j), filterDimensionsOrdinal); } else if (!CarbonUtil.hasEncoding(encodingList, Encoding.DIRECT_DICTIONARY)) { filterDimensionsOrdinal.add(queryDimensions.getListOfChildDimensions().get(j).getOrdinal()); } } }
/** * Below method will be used to fill the children dimension column id * * @param queryDimensions query dimension * @param dictionaryDimensionFromQuery dictionary dimension for query */ private static void getChildDimensionDictionaryDetail(CarbonDimension queryDimensions, Set<String> dictionaryDimensionFromQuery) { for (int j = 0; j < queryDimensions.getNumberOfChild(); j++) { List<Encoding> encodingList = queryDimensions.getListOfChildDimensions().get(j).getEncoder(); if (queryDimensions.getListOfChildDimensions().get(j).getNumberOfChild() > 0) { getChildDimensionDictionaryDetail(queryDimensions.getListOfChildDimensions().get(j), dictionaryDimensionFromQuery); } else if (CarbonUtil.hasEncoding(encodingList, Encoding.DICTIONARY) && !CarbonUtil .hasEncoding(encodingList, Encoding.DIRECT_DICTIONARY)) { dictionaryDimensionFromQuery .add(queryDimensions.getListOfChildDimensions().get(j).getColumnId()); } } }
if (queryDimension.get(counter).getDimension().getNumberOfChild() > 0) { counter += queryDimension.get(counter).getDimension().getNumberOfChild(); } else if (!CarbonUtil.hasEncoding(queryDimension.get(counter).getDimension().getEncoder(), Encoding.DICTIONARY)) { counter++;
List<Encoding> encodingList = queryDimensions.get(i).getDimension().getEncoder();
CarbonDimension carbonDimension = dimensions.get(counter); if (!carbonDimension.getEncoder().contains(Encoding.DICTIONARY)) { isDictionaryColumn.add(false); counter++;
sortColumnMapping[i] = true; if (CarbonUtil.hasEncoding(dimension.getEncoder(), Encoding.DICTIONARY)) { i++; continue;
/** * Below method will be used to fill block indexes of the query dimension * which will be used in creating a output row Here is method we are passing * two list which store the indexes one for dictionary column other for not * dictionary column. This is done for specific purpose so that in one * iteration we will be able to fill both type dimension block indexes * * @param projectDimensions dimension present in the query * @param columnOrdinalToChunkIndexMapping column ordinal to block index mapping * @param dictionaryDimensionChunkIndex list to store dictionary column block indexes * @param noDictionaryDimensionChunkIndex list to store no dictionary block indexes */ public static void fillQueryDimensionChunkIndexes( List<ProjectionDimension> projectDimensions, Map<Integer, Integer> columnOrdinalToChunkIndexMapping, Set<Integer> dictionaryDimensionChunkIndex, List<Integer> noDictionaryDimensionChunkIndex) { for (ProjectionDimension queryDimension : projectDimensions) { if (CarbonUtil.hasEncoding(queryDimension.getDimension().getEncoder(), Encoding.DICTIONARY) && queryDimension.getDimension().getNumberOfChild() == 0) { dictionaryDimensionChunkIndex .add(columnOrdinalToChunkIndexMapping.get(queryDimension.getDimension().getOrdinal())); } else if ( !CarbonUtil.hasEncoding(queryDimension.getDimension().getEncoder(), Encoding.IMPLICIT) && queryDimension.getDimension().getNumberOfChild() == 0) { noDictionaryDimensionChunkIndex .add(columnOrdinalToChunkIndexMapping.get(queryDimension.getDimension().getOrdinal())); } } }
/** * This method will validate and return the default value to be * filled at the time of result preparation * * @param queryDimension * @return */ public static Object validateAndGetDefaultValue(CarbonDimension queryDimension) { byte[] defaultValue = queryDimension.getDefaultValue(); Object defaultValueToBeConsidered = null; if (CarbonUtil.hasEncoding(queryDimension.getEncoder(), Encoding.DICTIONARY)) { // direct dictionary case if (CarbonUtil.hasEncoding(queryDimension.getEncoder(), Encoding.DIRECT_DICTIONARY)) { defaultValueToBeConsidered = getDirectDictionaryDefaultValue(queryDimension.getDataType(), queryDimension.getDefaultValue()); } else { // dictionary case defaultValueToBeConsidered = getDictionaryDefaultValue(defaultValue); } } else { // no dictionary defaultValueToBeConsidered = getNoDictionaryDefaultValue(queryDimension.getDataType(), defaultValue); } return defaultValueToBeConsidered; }
} else { boolean isDirectDictionary = CarbonUtil .hasEncoding(dimension.getListOfChildDimensions().get(i).getEncoder(), Encoding.DIRECT_DICTIONARY); boolean isDictionary = CarbonUtil .hasEncoding(dimension.getListOfChildDimensions().get(i).getEncoder(), Encoding.DICTIONARY);
int newKeyArrayIndex = 0; for (int i = 0; i < dimensionInfo.getDimensionExists().length; i++) { if (CarbonUtil.hasEncoding(actualQueryDimensions[i].getDimension().getEncoder(), Encoding.DICTIONARY)) {
} else { boolean isDirectDictionary = CarbonUtil.hasEncoding(child.getEncoder(), Encoding.DIRECT_DICTIONARY); boolean isDictionary = CarbonUtil.hasEncoding(child.getEncoder(), Encoding.DICTIONARY); Dictionary dictionary = null; if (isDictionary) {