@Override public void setSurrogateIndex(int surrIndex) { if (this.carbonDimension != null && !this.carbonDimension.hasEncoding(Encoding.DICTIONARY)) { index = 0; } else if (this.carbonDimension == null && isDictionary == false) { index = 0; } else { index = surrIndex; } }
private boolean isDictionaryDimension(CarbonDimension carbonDimension) { if (carbonDimension.hasEncoding(Encoding.DICTIONARY)) { return true; } else { return false; } }
private static String isDictionaryType(CarbonDimension dimension) { Boolean isDictionary = true; if (!(dimension.hasEncoding(Encoding.DICTIONARY))) { isDictionary = false; } return isDictionary.toString(); }
/** * This method will return the default cardinality based on dimension type * * @param dimension * @return */ private static int getDimensionDefaultCardinality(CarbonDimension dimension) { int cardinality = 0; if (dimension.hasEncoding(Encoding.DIRECT_DICTIONARY)) { cardinality = Integer.MAX_VALUE; } else if (dimension.hasEncoding(Encoding.DICTIONARY)) { if (null != dimension.getDefaultValue()) { cardinality = CarbonCommonConstants.DICTIONARY_DEFAULT_CARDINALITY + 1; } else { cardinality = CarbonCommonConstants.DICTIONARY_DEFAULT_CARDINALITY; } } else { cardinality = -1; } return cardinality; }
public static boolean[] getDictionaryEncodingArray(ProjectionDimension[] queryDimensions) { boolean[] dictionaryEncodingArray = new boolean[queryDimensions.length]; for (int i = 0; i < queryDimensions.length; i++) { dictionaryEncodingArray[i] = queryDimensions[i].getDimension().hasEncoding(Encoding.DICTIONARY); } return dictionaryEncodingArray; }
@Override public void fillCardinality(List<Integer> dimCardWithComplex) { if (!this.carbonDimension.hasEncoding(Encoding.DICTIONARY)) { return; } dimCardWithComplex.add(dictionaryGenerator.size()); }
public static boolean[] getDirectDictionaryEncodingArray(ProjectionDimension[] queryDimensions) { boolean[] dictionaryEncodingArray = new boolean[queryDimensions.length]; for (int i = 0; i < queryDimensions.length; i++) { dictionaryEncodingArray[i] = queryDimensions[i].getDimension().hasEncoding(Encoding.DIRECT_DICTIONARY); } return dictionaryEncodingArray; }
public static boolean[] getImplicitColumnArray(ProjectionDimension[] queryDimensions) { boolean[] implicitColumnArray = new boolean[queryDimensions.length]; for (int i = 0; i < queryDimensions.length; i++) { implicitColumnArray[i] = queryDimensions[i].getDimension().hasEncoding(Encoding.IMPLICIT); } return implicitColumnArray; }
private boolean isColDictionary() { RangeExpression condExp = (RangeExpression) exp; List<ColumnExpression> columnList = condExp.getColumnList(); if (columnList.get(0).getDimension().hasEncoding(Encoding.DICTIONARY)) { if (columnList.get(0).getDimension().hasEncoding(Encoding.DIRECT_DICTIONARY)) { return false; } else { return true; } } else { return false; } }
/** * This method will compute the default value for a dimension * * @param dimColumnEvaluatorInfo * @return */ private Object getDimensionDefaultValue(DimColumnResolvedFilterInfo dimColumnEvaluatorInfo) { Object dimensionDefaultValue = null; CarbonDimension dimension = dimColumnEvaluatorInfo.getDimension(); if (dimension.hasEncoding(Encoding.DICTIONARY) && !dimension .hasEncoding(Encoding.DIRECT_DICTIONARY)) { byte[] defaultValue = dimension.getDefaultValue(); if (null != defaultValue) { dimensionDefaultValue = new String(defaultValue, Charset.forName(CarbonCommonConstants.DEFAULT_CHARSET)); } } else { dimensionDefaultValue = RestructureUtil.validateAndGetDefaultValue(dimension); } return dimensionDefaultValue; }
/** * Get the no dictionary data types on the table * * @param carbonTable * @return */ public static DataType[] getNoDictDataTypes(CarbonTable carbonTable) { List<CarbonDimension> dimensions = carbonTable.getDimensionByTableName(carbonTable.getTableName()); List<DataType> type = new ArrayList<>(); for (int i = 0; i < dimensions.size(); i++) { if (dimensions.get(i).isSortColumn() && !dimensions.get(i).hasEncoding(Encoding.DICTIONARY)) { type.add(dimensions.get(i).getDataType()); } } return type.toArray(new DataType[type.size()]); }
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()); } } } }
/** * This method will return the filter values which is present in the range level * conditional expressions. * * @return */ public byte[][] getFilterRangeValues(SegmentProperties segmentProperties) { if (null != dimColResolvedFilterInfo.getFilterValues() && !dimColResolvedFilterInfo .getDimension().hasEncoding(Encoding.DICTIONARY)) { List<byte[]> noDictFilterValuesList = dimColResolvedFilterInfo.getFilterValues().getNoDictionaryFilterValuesList(); return noDictFilterValuesList.toArray((new byte[noDictFilterValuesList.size()][])); } else if (null != dimColResolvedFilterInfo.getFilterValues() && dimColResolvedFilterInfo .getDimension().hasEncoding(Encoding.DIRECT_DICTIONARY)) { return FilterUtil.getKeyArray(this.dimColResolvedFilterInfo.getFilterValues(), this.dimColResolvedFilterInfo.getDimension(), segmentProperties, false); } return null; }
private boolean isScanRequired(DimensionRawColumnChunk rawColumnChunk, int i) { boolean scanRequired; DataType dataType = dimColEvaluatorInfoList.get(0).getDimension().getDataType(); // for no dictionary measure column comparison can be done // on the original data as like measure column if (DataTypeUtil.isPrimitiveColumn(dataType) && !dimColEvaluatorInfoList.get(0) .getDimension().hasEncoding(Encoding.DICTIONARY)) { scanRequired = isScanRequired(rawColumnChunk.getMinValues()[i], this.filterRangeValues, dataType); } else { scanRequired = isScanRequired(rawColumnChunk.getMinValues()[i], this.filterRangeValues, rawColumnChunk.getMinMaxFlagArray()[i]); } return scanRequired; }
private boolean isScanRequired(DimensionRawColumnChunk rawColumnChunk, int i) { boolean scanRequired; DataType dataType = dimColEvaluatorInfoList.get(0).getDimension().getDataType(); // for no dictionary measure column comparison can be done // on the original data as like measure column if (DataTypeUtil.isPrimitiveColumn(dataType) && !dimColEvaluatorInfoList.get(0) .getDimension().hasEncoding(Encoding.DICTIONARY)) { scanRequired = isScanRequired(rawColumnChunk.getMaxValues()[i], this.filterRangeValues, dataType); } else { scanRequired = isScanRequired(rawColumnChunk.getMaxValues()[i], this.filterRangeValues, rawColumnChunk.getMinMaxFlagArray()[i]); } return scanRequired; }
private boolean isScanRequired(DimensionRawColumnChunk rawColumnChunk, int i) { boolean scanRequired; DataType dataType = dimColEvaluatorInfoList.get(0).getDimension().getDataType(); // for no dictionary measure column comparison can be done // on the original data as like measure column if (DataTypeUtil.isPrimitiveColumn(dataType) && !dimColEvaluatorInfoList.get(0) .getDimension().hasEncoding(Encoding.DICTIONARY)) { scanRequired = isScanRequired(rawColumnChunk.getMinValues()[i], this.filterRangeValues, dataType); } else { scanRequired = isScanRequired(rawColumnChunk.getMinValues()[i], this.filterRangeValues, rawColumnChunk.getMinMaxFlagArray()[i]); } return scanRequired; }
private boolean isScanRequired(DimensionRawColumnChunk rawColumnChunk, int columnIndex) { boolean scanRequired; DataType dataType = dimColEvaluatorInfoList.get(0).getDimension().getDataType(); // for no dictionary measure column comparison can be done // on the original data as like measure column if (DataTypeUtil.isPrimitiveColumn(dataType) && !dimColEvaluatorInfoList.get(0).getDimension() .hasEncoding(Encoding.DICTIONARY)) { scanRequired = isScanRequired(rawColumnChunk.getMaxValues()[columnIndex], this.filterRangeValues, dataType); } else { scanRequired = isScanRequired(rawColumnChunk.getMaxValues()[columnIndex], this.filterRangeValues, rawColumnChunk.getMinMaxFlagArray()[columnIndex]); } return scanRequired; }
@Override public void readColumnChunks(RawBlockletColumnChunks rawBlockletColumnChunks) throws IOException { if (isDimensionPresentInCurrentBlock[0]) { if (!dimColEvaluatorInfoList.get(0).getDimension().hasEncoding(Encoding.DICTIONARY)) { super.readColumnChunks(rawBlockletColumnChunks); } int chunkIndex = dimensionChunkIndex[0]; if (null == rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex]) { rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex] = rawBlockletColumnChunks.getDataBlock().readDimensionChunk( rawBlockletColumnChunks.getFileReader(), chunkIndex); } } else if (isMeasurePresentInCurrentBlock[0]) { int chunkIndex = msrColEvalutorInfoList.get(0).getColumnIndex(); if (null == rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex]) { rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex] = rawBlockletColumnChunks.getDataBlock().readMeasureChunk( rawBlockletColumnChunks.getFileReader(), chunkIndex); } } } }
@Override public void readColumnChunks(RawBlockletColumnChunks rawBlockletColumnChunks) throws IOException { if (isDimensionPresentInCurrentBlock[0]) { if (!dimColEvaluatorInfoList.get(0).getDimension().hasEncoding(Encoding.DICTIONARY)) { super.readColumnChunks(rawBlockletColumnChunks); } int chunkIndex = dimensionChunkIndex[0]; if (null == rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex]) { rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex] = rawBlockletColumnChunks.getDataBlock().readDimensionChunk( rawBlockletColumnChunks.getFileReader(), chunkIndex); } } else if (isMeasurePresentInCurrentBlock[0]) { int chunkIndex = msrColEvalutorInfoList.get(0).getColumnIndex(); if (null == rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex]) { rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex] = rawBlockletColumnChunks.getDataBlock().readMeasureChunk( rawBlockletColumnChunks.getFileReader(), chunkIndex); } } } }
private boolean isScanRequired(DimensionRawColumnChunk dimensionRawColumnChunk, int columnIndex) { boolean scanRequired; // for no dictionary measure column comparison can be done // on the original data as like measure column if (DataTypeUtil.isPrimitiveColumn(dimColumnEvaluatorInfo.getDimension().getDataType()) && !dimColumnEvaluatorInfo.getDimension().hasEncoding(Encoding.DICTIONARY)) { scanRequired = isScanRequired(dimensionRawColumnChunk.getMaxValues()[columnIndex], dimensionRawColumnChunk.getMinValues()[columnIndex], dimColumnExecuterInfo.getFilterKeys(), dimColumnEvaluatorInfo.getDimension().getDataType()); } else { scanRequired = isScanRequired(dimensionRawColumnChunk.getMaxValues()[columnIndex], dimensionRawColumnChunk.getMinValues()[columnIndex], dimColumnExecuterInfo.getFilterKeys(), dimensionRawColumnChunk.getMinMaxFlagArray()[columnIndex]); } return scanRequired; }