private CarbonDimension getDimensionBasedOnOrdinal(List<CarbonDimension> dimList, int ordinal) { for (CarbonDimension dimension : dimList) { if (dimension.getOrdinal() == ordinal) { return dimension; } } throw new RuntimeException("No Dimension Matches the ordinal value"); }
private static Set<Integer> getFilterDimensionOrdinal(Set<CarbonDimension> filterDimensions) { Set<Integer> filterDimensionsOrdinal = new HashSet<>(); for (CarbonDimension filterDimension : filterDimensions) { filterDimensionsOrdinal.add(filterDimension.getOrdinal()); getChildDimensionOrdinal(filterDimension, filterDimensionsOrdinal); } return filterDimensionsOrdinal; }
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 }); } } }
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 }); } } }
@Override public Object getDataBasedOnColumn(ByteBuffer dataBuffer, CarbonDimension parent, CarbonDimension child) { int childLength; if (parent.getOrdinal() < child.getOrdinal()) { childLength = parent.getNumberOfChild(); Object[] fields = new Object[childLength]; for (int i = 0; i < childLength; i++) { fields[i] = children.get(i) .getDataBasedOnColumn(dataBuffer, parent.getListOfChildDimensions().get(i), child); } return DataTypeUtil.getDataTypeConverter().wrapWithGenericRow(fields); } else if (parent.getOrdinal() > child.getOrdinal()) { return null; } else { // childLength = dataBuffer.getShort(); Object field = getDataBasedOnDataType(dataBuffer); return field; } }
private boolean checkForChildColumns(CarbonDimension parentDimension, CarbonDimension childDimension) { boolean output = false; if (parentDimension.getOrdinal() == childDimension.getOrdinal()) { output = true; } else if (parentDimension.getNumberOfChild() > 0) { for (int i = 0; i < parentDimension.getNumberOfChild() && !output; i++) { output = checkForChildColumns(parentDimension.getListOfChildDimensions().get(i), childDimension); } } else { output = false; } return output; }
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 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 add the children block index * this will be basically for complex dimension which will have children * * @param blockIndexes block indexes * @param dimension parent dimension */ private static void addChildrenBlockIndex(Set<Integer> blockIndexes, CarbonDimension dimension) { for (int i = 0; i < dimension.getNumberOfChild(); i++) { addChildrenBlockIndex(blockIndexes, dimension.getListOfChildDimensions().get(i)); blockIndexes.add(dimension.getListOfChildDimensions().get(i).getOrdinal()); } }
/** * This method will initialize the dimension info for the current block to be * used for filtering the data */ private void initDimensionChunkIndexes() { for (int i = 0; i < dimColEvaluatorInfoList.size(); i++) { // find the dimension in the current block dimensions list CarbonDimension dimensionFromCurrentBlock = segmentProperties .getDimensionFromCurrentBlock(dimColEvaluatorInfoList.get(i).getDimension()); if (null != dimensionFromCurrentBlock) { dimColEvaluatorInfoList.get(i).setColumnIndex(dimensionFromCurrentBlock.getOrdinal()); this.dimensionChunkIndex[i] = dimColEvaluatorInfoList.get(i).getColumnIndexInMinMaxByteArray(); isDimensionPresentInCurrentBlock[i] = true; } } }
/** * This method will initialize the dimension info for the current block to be * used for filtering the data */ private void initDimensionChunkIndexes() { // find the dimension in the current block dimensions list CarbonDimension dimensionFromCurrentBlock = segmentProperties.getDimensionFromCurrentBlock(dimColEvaluatorInfo.getDimension()); if (null != dimensionFromCurrentBlock) { dimColEvaluatorInfo.setColumnIndex(dimensionFromCurrentBlock.getOrdinal()); isDimensionPresentInCurrentBlock = true; } }
@Override public Object getDataBasedOnColumn(ByteBuffer dataBuffer, CarbonDimension parent, CarbonDimension child) { Object actualData; if (parent.getOrdinal() != child.getOrdinal() || null == dataBuffer || !dataBuffer .hasRemaining()) { return null; } int size; if (!DataTypeUtil.isFixedSizeDataType(child.getDataType())) { size = dataBuffer.array().length; } else if (child.getDataType() == DataTypes.TIMESTAMP) { size = DataTypes.LONG.getSizeInBytes(); } else { size = child.getDataType().getSizeInBytes(); } actualData = getDataObject(dataBuffer, size); return actualData; }
private CarbonDimension getDimensionBasedOnOrdinal(List<CarbonDimension> dimList, Integer ordinal) { for (CarbonDimension dims : dimList) { if (dims.getOrdinal() == ordinal) { return dims; } else if (dims.getNumberOfChild() > 0) { CarbonDimension dimensionBasedOnOrdinal = getDimensionBasedOnOrdinal(dims.getListOfChildDimensions(), ordinal); if (null != dimensionBasedOnOrdinal) { return dimensionBasedOnOrdinal; } } } return null; }
public static void getComplexNoDictionaryMapping(List<CarbonDimension> carbonDimensions, List<Integer> complexNoDictionary) { for (CarbonDimension carbonDimension : carbonDimensions) { if (carbonDimension.isComplex()) { getComplexNoDictionaryMapping(carbonDimension.getListOfChildDimensions(), complexNoDictionary); } else { // This is primitive type. Check the encoding for NoDictionary. if (!carbonDimension.hasEncoding(Encoding.DICTIONARY)) { complexNoDictionary.add(carbonDimension.getOrdinal()); } } } }
/** * 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()); } } }
@Override public boolean applyFilter(RowIntf value, int dimOrdinalMax) throws FilterUnsupportedException, IOException { if (isDimensionPresentInCurrentBlock[0]) { byte[] col = (byte[]) value.getVal(dimColEvaluatorInfoList.get(0).getDimension().getOrdinal()); return ByteUtil.compare(filterRangeValues[0], col) <= 0; } if (isMeasurePresentInCurrentBlock[0]) { Object col = value.getVal(msrColEvalutorInfoList.get(0).getMeasure().getOrdinal() + dimOrdinalMax); return comparator.compare(msrFilterRangeValues[0], col) <= 0; } return false; }
@Override public boolean applyFilter(RowIntf value, int dimOrdinalMax) throws FilterUnsupportedException, IOException { if (isDimensionPresentInCurrentBlock[0]) { byte[] col = (byte[]) value.getVal(dimColEvaluatorInfoList.get(0).getDimension().getOrdinal()); return ByteUtil.compare(filterRangeValues[0], col) < 0; } if (isMeasurePresentInCurrentBlock[0]) { Object col = value.getVal(msrColEvalutorInfoList.get(0).getMeasure().getOrdinal() + dimOrdinalMax); return comparator.compare(msrFilterRangeValues[0], col) < 0; } return false; }
@Override public boolean applyFilter(RowIntf value, int dimOrdinalMax) throws FilterUnsupportedException, IOException { if (isDimensionPresentInCurrentBlock[0]) { byte[] col = (byte[]) value.getVal(dimColEvaluatorInfoList.get(0).getDimension().getOrdinal()); return ByteUtil.compare(filterRangeValues[0], col) > 0; } if (isMeasurePresentInCurrentBlock[0]) { Object col = value.getVal(msrColEvalutorInfoList.get(0).getMeasure().getOrdinal() + dimOrdinalMax); return comparator.compare(msrFilterRangeValues[0], col) > 0; } return false; }
@Override public boolean applyFilter(RowIntf value, int dimOrdinalMax) throws FilterUnsupportedException, IOException { if (isDimensionPresentInCurrentBlock[0]) { byte[] col = (byte[]) value.getVal(dimColEvaluatorInfoList.get(0).getDimension().getOrdinal()); return ByteUtil.compare(filterRangeValues[0], col) >= 0; } if (isMeasurePresentInCurrentBlock[0]) { Object col = value.getVal(msrColEvalutorInfoList.get(0).getMeasure().getOrdinal() + dimOrdinalMax); return comparator.compare(msrFilterRangeValues[0], col) >= 0; } return false; }
public void populateFilterInfoBasedOnColumnType(ResolvedFilterInfoVisitorIntf visitor, FilterResolverMetadata metadata) throws FilterUnsupportedException, IOException { if (null != visitor) { visitor.populateFilterResolvedInfo(this, metadata); this.addDimensionResolvedFilterInstance(metadata.getColumnExpression().getDimension(), this.getFilterValues()); this.setDimension(metadata.getColumnExpression().getDimension()); this.setColumnIndex(metadata.getColumnExpression().getDimension().getOrdinal()); } }