diff --git a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/AbstractScannedResultCollector.java b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/AbstractScannedResultCollector.java index 3b5faa4ee36..694271e6b7c 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/AbstractScannedResultCollector.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/AbstractScannedResultCollector.java @@ -40,7 +40,7 @@ public abstract class AbstractScannedResultCollector implements ScannedResultCol /** * table block execution infos */ - BlockExecutionInfo tableBlockExecutionInfos; + BlockExecutionInfo executionInfo; /** * maintains the measure information like datatype, ordinal, measure existence @@ -53,7 +53,7 @@ public abstract class AbstractScannedResultCollector implements ScannedResultCol DimensionInfo dimensionInfo; AbstractScannedResultCollector(BlockExecutionInfo blockExecutionInfos) { - this.tableBlockExecutionInfos = blockExecutionInfos; + this.executionInfo = blockExecutionInfos; measureInfo = blockExecutionInfos.getMeasureInfo(); dimensionInfo = blockExecutionInfos.getDimensionInfo(); } @@ -65,7 +65,7 @@ protected void fillMeasureData(Object[] msrValues, int offset, // if measure exists is block then pass measure column // data chunk to the collector if (measureInfo.getMeasureExists()[i]) { - ProjectionMeasure queryMeasure = tableBlockExecutionInfos.getQueryMeasures()[measureExistIndex]; + ProjectionMeasure queryMeasure = executionInfo.getProjectionMeasures()[measureExistIndex]; msrValues[i + offset] = getMeasureData( scannedResult.getMeasureChunk(measureInfo.getMeasureOrdinals()[measureExistIndex]), scannedResult.getCurrentRowId(), queryMeasure.getMeasure()); diff --git a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/DictionaryBasedResultCollector.java b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/DictionaryBasedResultCollector.java index c683b369c8d..43220346fe9 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/DictionaryBasedResultCollector.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/DictionaryBasedResultCollector.java @@ -73,11 +73,11 @@ public class DictionaryBasedResultCollector extends AbstractScannedResultCollect public DictionaryBasedResultCollector(BlockExecutionInfo blockExecutionInfos) { super(blockExecutionInfos); - queryDimensions = tableBlockExecutionInfos.getQueryDimensions(); - queryMeasures = tableBlockExecutionInfos.getQueryMeasures(); + queryDimensions = executionInfo.getProjectionDimensions(); + queryMeasures = executionInfo.getProjectionMeasures(); initDimensionAndMeasureIndexesForFillingData(); isDimensionExists = queryDimensions.length > 0; - this.comlexDimensionInfoMap = tableBlockExecutionInfos.getComlexDimensionInfoMap(); + this.comlexDimensionInfoMap = executionInfo.getComlexDimensionInfoMap(); } /** @@ -191,10 +191,10 @@ void initDimensionAndMeasureIndexesForFillingData() { complexDataTypeArray = CarbonUtil.getComplexDataTypeArray(queryDimensions); order = new int[queryDimensions.length + queryMeasures.length]; for (int i = 0; i < queryDimensions.length; i++) { - order[i] = queryDimensions[i].getProjectionOrdinal(); + order[i] = queryDimensions[i].getOrdinal(); } for (int i = 0; i < queryMeasures.length; i++) { - order[i + queryDimensions.length] = queryMeasures[i].getProjectionOrdinal(); + order[i + queryDimensions.length] = queryMeasures[i].getOrdinal(); } directDictionaryGenerators = new DirectDictionaryGenerator[queryDimensions.length]; for (int i = 0; i < queryDimensions.length; i++) { diff --git a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/DictionaryBasedVectorResultCollector.java b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/DictionaryBasedVectorResultCollector.java index b485b4b4ffc..e6cc817de44 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/DictionaryBasedVectorResultCollector.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/DictionaryBasedVectorResultCollector.java @@ -56,8 +56,8 @@ public DictionaryBasedVectorResultCollector(BlockExecutionInfo blockExecutionInf // initialize only if the current block is not a restructured block else the initialization // will be taken care by RestructureBasedVectorResultCollector if (!blockExecutionInfos.isRestructuredBlock()) { - queryDimensions = tableBlockExecutionInfos.getQueryDimensions(); - queryMeasures = tableBlockExecutionInfos.getQueryMeasures(); + queryDimensions = executionInfo.getProjectionDimensions(); + queryMeasures = executionInfo.getProjectionMeasures(); allColumnInfo = new ColumnVectorInfo[queryDimensions.length + queryMeasures.length]; prepareDimensionAndMeasureColumnVectors(); } @@ -78,13 +78,13 @@ void prepareDimensionAndMeasureColumnVectors() { implictColumnList.add(columnVectorInfo); columnVectorInfo.dimension = queryDimensions[i]; columnVectorInfo.ordinal = queryDimensions[i].getDimension().getOrdinal(); - allColumnInfo[queryDimensions[i].getProjectionOrdinal()] = columnVectorInfo; + allColumnInfo[queryDimensions[i].getOrdinal()] = columnVectorInfo; } else if (!queryDimensions[i].getDimension().hasEncoding(Encoding.DICTIONARY)) { ColumnVectorInfo columnVectorInfo = new ColumnVectorInfo(); noDictInfoList.add(columnVectorInfo); columnVectorInfo.dimension = queryDimensions[i]; columnVectorInfo.ordinal = queryDimensions[i].getDimension().getOrdinal(); - allColumnInfo[queryDimensions[i].getProjectionOrdinal()] = columnVectorInfo; + allColumnInfo[queryDimensions[i].getOrdinal()] = columnVectorInfo; } else if (queryDimensions[i].getDimension().hasEncoding(Encoding.DIRECT_DICTIONARY)) { ColumnVectorInfo columnVectorInfo = new ColumnVectorInfo(); dictInfoList.add(columnVectorInfo); @@ -92,21 +92,21 @@ void prepareDimensionAndMeasureColumnVectors() { columnVectorInfo.directDictionaryGenerator = DirectDictionaryKeyGeneratorFactory .getDirectDictionaryGenerator(queryDimensions[i].getDimension().getDataType()); columnVectorInfo.ordinal = queryDimensions[i].getDimension().getOrdinal(); - allColumnInfo[queryDimensions[i].getProjectionOrdinal()] = columnVectorInfo; + allColumnInfo[queryDimensions[i].getOrdinal()] = columnVectorInfo; } else if (queryDimensions[i].getDimension().isComplex()) { ColumnVectorInfo columnVectorInfo = new ColumnVectorInfo(); complexList.add(columnVectorInfo); columnVectorInfo.dimension = queryDimensions[i]; columnVectorInfo.ordinal = queryDimensions[i].getDimension().getOrdinal(); columnVectorInfo.genericQueryType = - tableBlockExecutionInfos.getComlexDimensionInfoMap().get(columnVectorInfo.ordinal); - allColumnInfo[queryDimensions[i].getProjectionOrdinal()] = columnVectorInfo; + executionInfo.getComlexDimensionInfoMap().get(columnVectorInfo.ordinal); + allColumnInfo[queryDimensions[i].getOrdinal()] = columnVectorInfo; } else { ColumnVectorInfo columnVectorInfo = new ColumnVectorInfo(); dictInfoList.add(columnVectorInfo); columnVectorInfo.dimension = queryDimensions[i]; columnVectorInfo.ordinal = queryDimensions[i].getDimension().getOrdinal(); - allColumnInfo[queryDimensions[i].getProjectionOrdinal()] = columnVectorInfo; + allColumnInfo[queryDimensions[i].getOrdinal()] = columnVectorInfo; } } for (int i = 0; i < queryMeasures.length; i++) { @@ -116,7 +116,7 @@ void prepareDimensionAndMeasureColumnVectors() { columnVectorInfo.ordinal = queryMeasures[i].getMeasure().getOrdinal(); columnVectorInfo.measure = queryMeasures[i]; this.measureColumnInfo[i] = columnVectorInfo; - allColumnInfo[queryMeasures[i].getProjectionOrdinal()] = columnVectorInfo; + allColumnInfo[queryMeasures[i].getOrdinal()] = columnVectorInfo; } dictionaryInfo = dictInfoList.toArray(new ColumnVectorInfo[dictInfoList.size()]); noDictionaryInfo = noDictInfoList.toArray(new ColumnVectorInfo[noDictInfoList.size()]); diff --git a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RawBasedResultCollector.java b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RawBasedResultCollector.java index 615422495c5..07806758893 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RawBasedResultCollector.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RawBasedResultCollector.java @@ -46,7 +46,7 @@ public RawBasedResultCollector(BlockExecutionInfo blockExecutionInfos) { @Override public List collectResultInRow(BlockletScannedResult scannedResult, int batchSize) { List listBasedResult = new ArrayList<>(batchSize); - ProjectionMeasure[] queryMeasures = tableBlockExecutionInfos.getQueryMeasures(); + ProjectionMeasure[] queryMeasures = executionInfo.getProjectionMeasures(); // scan the record and add to list int rowCounter = 0; while (scannedResult.hasNext() && rowCounter < batchSize) { diff --git a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RestructureBasedDictionaryResultCollector.java b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RestructureBasedDictionaryResultCollector.java index db8cc63a699..8b42a4af711 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RestructureBasedDictionaryResultCollector.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RestructureBasedDictionaryResultCollector.java @@ -35,8 +35,8 @@ public class RestructureBasedDictionaryResultCollector extends DictionaryBasedRe public RestructureBasedDictionaryResultCollector(BlockExecutionInfo blockExecutionInfos) { super(blockExecutionInfos); - queryDimensions = tableBlockExecutionInfos.getActualQueryDimensions(); - queryMeasures = tableBlockExecutionInfos.getActualQueryMeasures(); + queryDimensions = executionInfo.getActualQueryDimensions(); + queryMeasures = executionInfo.getActualQueryMeasures(); measureDefaultValues = new Object[queryMeasures.length]; fillMeasureDefaultValues(); initDimensionAndMeasureIndexesForFillingData(); @@ -70,7 +70,7 @@ public List collectResultInRow(BlockletScannedResult scannedResult, in byte[][] noDictionaryKeys; byte[][] complexTypeKeyArray; Map comlexDimensionInfoMap = - tableBlockExecutionInfos.getComlexDimensionInfoMap(); + executionInfo.getComlexDimensionInfoMap(); while (scannedResult.hasNext() && rowCounter < batchSize) { Object[] row = new Object[queryDimensions.length + queryMeasures.length]; if (isDimensionExists) { @@ -114,7 +114,7 @@ protected void fillMeasureData(Object[] msrValues, int offset, // if measure exists is block then pass measure column // data chunk to the collector if (measureInfo.getMeasureExists()[i]) { - ProjectionMeasure queryMeasure = tableBlockExecutionInfos.getQueryMeasures()[measureExistIndex]; + ProjectionMeasure queryMeasure = executionInfo.getProjectionMeasures()[measureExistIndex]; msrValues[i + offset] = getMeasureData( scannedResult.getMeasureChunk(measureInfo.getMeasureOrdinals()[measureExistIndex]), scannedResult.getCurrentRowId(), queryMeasure.getMeasure()); diff --git a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RestructureBasedRawResultCollector.java b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RestructureBasedRawResultCollector.java index 7a344347a29..6544a750ab1 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RestructureBasedRawResultCollector.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RestructureBasedRawResultCollector.java @@ -70,15 +70,15 @@ public RestructureBasedRawResultCollector(BlockExecutionInfo blockExecutionInfos */ private void initRestructuredKeyGenerator() { SegmentProperties segmentProperties = - tableBlockExecutionInfos.getDataBlock().getSegmentProperties(); - ProjectionDimension[] queryDimensions = tableBlockExecutionInfos.getActualQueryDimensions(); + executionInfo.getDataBlock().getSegmentProperties(); + ProjectionDimension[] queryDimensions = executionInfo.getActualQueryDimensions(); List updatedColumnCardinality = new ArrayList<>(queryDimensions.length); List updatedDimensionPartitioner = new ArrayList<>(queryDimensions.length); - int[] dictionaryColumnBlockIndex = tableBlockExecutionInfos.getDictionaryColumnChunkIndex(); + int[] dictionaryColumnBlockIndex = executionInfo.getDictionaryColumnChunkIndex(); int dimCounterInCurrentBlock = 0; for (int i = 0; i < queryDimensions.length; i++) { if (queryDimensions[i].getDimension().hasEncoding(Encoding.DICTIONARY)) { - if (tableBlockExecutionInfos.getDimensionInfo().getDimensionExists()[i]) { + if (executionInfo.getDimensionInfo().getDimensionExists()[i]) { // get the dictionary key ordinal as column cardinality in segment properties // will only be for dictionary encoded columns CarbonDimension currentBlockDimension = segmentProperties.getDimensions() @@ -124,8 +124,8 @@ private void initRestructuredKeyGenerator() { */ private void initCurrentBlockKeyGenerator() { SegmentProperties segmentProperties = - tableBlockExecutionInfos.getDataBlock().getSegmentProperties(); - int[] dictionaryColumnBlockIndex = tableBlockExecutionInfos.getDictionaryColumnChunkIndex(); + executionInfo.getDataBlock().getSegmentProperties(); + int[] dictionaryColumnBlockIndex = executionInfo.getDictionaryColumnChunkIndex(); int[] updatedColumnCardinality = new int[dictionaryColumnBlockIndex.length]; int[] updatedDimensionPartitioner = new int[dictionaryColumnBlockIndex.length]; for (int i = 0; i < dictionaryColumnBlockIndex.length; i++) { @@ -152,7 +152,7 @@ private void initCurrentBlockKeyGenerator() { @Override public List collectResultInRow(BlockletScannedResult scannedResult, int batchSize) { List listBasedResult = new ArrayList<>(batchSize); - ProjectionMeasure[] queryMeasures = tableBlockExecutionInfos.getActualQueryMeasures(); + ProjectionMeasure[] queryMeasures = executionInfo.getActualQueryMeasures(); // scan the record and add to list int rowCounter = 0; while (scannedResult.hasNext() && rowCounter < batchSize) { @@ -180,7 +180,7 @@ public List collectResultInRow(BlockletScannedResult scannedResult, in * @return */ private byte[] fillDictionaryKeyArrayWithLatestSchema(byte[] dictionaryKeyArray) { - ProjectionDimension[] actualQueryDimensions = tableBlockExecutionInfos.getActualQueryDimensions(); + ProjectionDimension[] actualQueryDimensions = executionInfo.getActualQueryDimensions(); int newKeyArrayLength = dimensionInfo.getNewDictionaryColumnCount(); long[] keyArray = null; if (null != updatedCurrentBlockKeyGenerator) { @@ -223,7 +223,7 @@ private byte[] fillDictionaryKeyArrayWithLatestSchema(byte[] dictionaryKeyArray) * @return */ private byte[][] fillNoDictionaryKeyArrayWithLatestSchema(byte[][] noDictionaryKeyArray) { - ProjectionDimension[] actualQueryDimensions = tableBlockExecutionInfos.getActualQueryDimensions(); + ProjectionDimension[] actualQueryDimensions = executionInfo.getActualQueryDimensions(); byte[][] noDictionaryKeyArrayWithNewlyAddedColumns = new byte[noDictionaryKeyArray.length + dimensionInfo.getNewNoDictionaryColumnCount()][]; int existingColumnValueIndex = 0; diff --git a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RestructureBasedVectorResultCollector.java b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RestructureBasedVectorResultCollector.java index fd4e44bcc79..c54994aa915 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RestructureBasedVectorResultCollector.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/RestructureBasedVectorResultCollector.java @@ -43,8 +43,8 @@ public class RestructureBasedVectorResultCollector extends DictionaryBasedVector public RestructureBasedVectorResultCollector(BlockExecutionInfo blockExecutionInfos) { super(blockExecutionInfos); - queryDimensions = tableBlockExecutionInfos.getActualQueryDimensions(); - queryMeasures = tableBlockExecutionInfos.getActualQueryMeasures(); + queryDimensions = executionInfo.getActualQueryDimensions(); + queryMeasures = executionInfo.getActualQueryMeasures(); measureDefaultValues = new Object[queryMeasures.length]; allColumnInfo = new ColumnVectorInfo[queryDimensions.length + queryMeasures.length]; createVectorForNewlyAddedDimensions(); @@ -66,7 +66,7 @@ private void createVectorForNewlyAddedDimensions() { columnVectorInfo.directDictionaryGenerator = DirectDictionaryKeyGeneratorFactory .getDirectDictionaryGenerator(queryDimensions[i].getDimension().getDataType()); } - allColumnInfo[queryDimensions[i].getProjectionOrdinal()] = columnVectorInfo; + allColumnInfo[queryDimensions[i].getOrdinal()] = columnVectorInfo; } } } @@ -79,7 +79,7 @@ private void createVectorForNewlyAddedMeasures() { if (!measureInfo.getMeasureExists()[i]) { // add a dummy column vector result collector object ColumnVectorInfo columnVectorInfo = new ColumnVectorInfo(); - allColumnInfo[queryMeasures[i].getProjectionOrdinal()] = columnVectorInfo; + allColumnInfo[queryMeasures[i].getOrdinal()] = columnVectorInfo; columnVectorInfo.measure = queryMeasures[i]; measureDefaultValues[i] = getMeasureDefaultValue(queryMeasures[i].getMeasure()); } @@ -137,11 +137,11 @@ public void collectResultInColumnarBatch(BlockletScannedResult scannedResult, * This method will fill the default values of non existing dimensions in the current block */ private void fillDataForNonExistingDimensions() { - for (int i = 0; i < tableBlockExecutionInfos.getActualQueryDimensions().length; i++) { + for (int i = 0; i < executionInfo.getActualQueryDimensions().length; i++) { if (!dimensionInfo.getDimensionExists()[i]) { - int queryOrder = tableBlockExecutionInfos.getActualQueryDimensions()[i].getProjectionOrdinal(); + int queryOrder = executionInfo.getActualQueryDimensions()[i].getOrdinal(); CarbonDimension dimension = - tableBlockExecutionInfos.getActualQueryDimensions()[i].getDimension(); + executionInfo.getActualQueryDimensions()[i].getDimension(); if (dimension.hasEncoding(Encoding.DIRECT_DICTIONARY)) { // fill direct dictionary column data fillDirectDictionaryData(allColumnInfo[queryOrder].vector, allColumnInfo[queryOrder], @@ -219,10 +219,10 @@ private void fillNoDictionaryData(CarbonColumnVector vector, ColumnVectorInfo co * This method will fill the default values of non existing measures in the current block */ private void fillDataForNonExistingMeasures() { - for (int i = 0; i < tableBlockExecutionInfos.getActualQueryMeasures().length; i++) { + for (int i = 0; i < executionInfo.getActualQueryMeasures().length; i++) { if (!measureInfo.getMeasureExists()[i]) { - int queryOrder = tableBlockExecutionInfos.getActualQueryMeasures()[i].getProjectionOrdinal(); - CarbonMeasure measure = tableBlockExecutionInfos.getActualQueryMeasures()[i].getMeasure(); + int queryOrder = executionInfo.getActualQueryMeasures()[i].getOrdinal(); + CarbonMeasure measure = executionInfo.getActualQueryMeasures()[i].getMeasure(); ColumnVectorInfo columnVectorInfo = allColumnInfo[queryOrder]; CarbonColumnVector vector = columnVectorInfo.vector; Object defaultValue = measureDefaultValues[i]; diff --git a/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/AbstractQueryExecutor.java b/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/AbstractQueryExecutor.java index 440134eb4d7..b9d58e718d5 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/AbstractQueryExecutor.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/AbstractQueryExecutor.java @@ -197,9 +197,11 @@ protected void initQuery(QueryModel queryModel) throws IOException { queryStatistic = new QueryStatistic(); // dictionary column unique column id to dictionary mapping // which will be used to get column actual data - queryProperties.columnToDictionayMapping = QueryUtil - .getDimensionDictionaryDetail(queryModel.getProjectionDimensions(), - queryProperties.complexFilterDimension, queryModel.getAbsoluteTableIdentifier(), + queryProperties.columnToDictionayMapping = + QueryUtil.getDimensionDictionaryDetail( + queryModel.getProjectionDimensions(), + queryProperties.complexFilterDimension, + queryModel.getAbsoluteTableIdentifier(), tableProvider); queryStatistic .addStatistics(QueryStatisticsConstants.LOAD_DICTIONARY, System.currentTimeMillis()); @@ -276,7 +278,7 @@ protected List getBlockExecutionInfos(QueryModel queryModel) * @return block execution info * @throws QueryExecutionException any failure during block info creation */ - protected BlockExecutionInfo getBlockExecutionInfoForBlock(QueryModel queryModel, + private BlockExecutionInfo getBlockExecutionInfoForBlock(QueryModel queryModel, AbstractIndex blockIndex, int startBlockletIndex, int numberOfBlockletToScan, String filePath, String[] deleteDeltaFiles) throws QueryExecutionException { @@ -298,12 +300,12 @@ protected BlockExecutionInfo getBlockExecutionInfoForBlock(QueryModel queryModel blockExecutionInfo.setDeleteDeltaFilePath(deleteDeltaFiles); blockExecutionInfo.setStartBlockletIndex(startBlockletIndex); blockExecutionInfo.setNumberOfBlockletToScan(numberOfBlockletToScan); - blockExecutionInfo.setQueryDimensions(currentBlockQueryDimensions + blockExecutionInfo.setProjectionDimensions(currentBlockQueryDimensions .toArray(new ProjectionDimension[currentBlockQueryDimensions.size()])); // get measures present in the current block List currentBlockQueryMeasures = getCurrentBlockQueryMeasures(blockExecutionInfo, queryModel, blockIndex); - blockExecutionInfo.setQueryMeasures( + blockExecutionInfo.setProjectionMeasures( currentBlockQueryMeasures.toArray(new ProjectionMeasure[currentBlockQueryMeasures.size()])); blockExecutionInfo.setDataBlock(blockIndex); // setting whether raw record query or not @@ -487,20 +489,20 @@ private int getKeySize(List queryDimension, /** * Below method will be used to get the measures present in the current block * - * @param blockExecutionInfo + * @param executionInfo * @param queryModel query model * @param tableBlock table block * @return */ - private List getCurrentBlockQueryMeasures(BlockExecutionInfo blockExecutionInfo, + private List getCurrentBlockQueryMeasures(BlockExecutionInfo executionInfo, QueryModel queryModel, AbstractIndex tableBlock) throws QueryExecutionException { // getting the measure info which will be used while filling up measure data List updatedQueryMeasures = RestructureUtil - .createMeasureInfoAndGetCurrentBlockQueryMeasures(blockExecutionInfo, + .createMeasureInfoAndGetCurrentBlockQueryMeasures(executionInfo, queryModel.getProjectionMeasures(), tableBlock.getSegmentProperties().getMeasures()); // setting the measure aggregator for all aggregation function selected // in query - blockExecutionInfo.getMeasureInfo().setMeasureDataTypes(queryProperties.measureDataTypes); + executionInfo.getMeasureInfo().setMeasureDataTypes(queryProperties.measureDataTypes); return updatedQueryMeasures; } diff --git a/core/src/main/java/org/apache/carbondata/core/scan/executor/infos/BlockExecutionInfo.java b/core/src/main/java/org/apache/carbondata/core/scan/executor/infos/BlockExecutionInfo.java index 555d82105cb..61b54f570f4 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/executor/infos/BlockExecutionInfo.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/executor/infos/BlockExecutionInfo.java @@ -165,7 +165,7 @@ public AbstractIndex getDataBlock() { * list of dimension present in the current block. This will be * different in case of restructured block */ - private ProjectionDimension[] queryDimensions; + private ProjectionDimension[] projectionDimensions; /** * list of dimension selected for in query @@ -176,7 +176,7 @@ public AbstractIndex getDataBlock() { * list of dimension present in the current block. This will be * different in case of restructured block */ - private ProjectionMeasure[] queryMeasures; + private ProjectionMeasure[] projectionMeasures; /** * list of measure selected in query @@ -460,20 +460,20 @@ public void setComplexColumnParentBlockIndexes(int[] complexColumnParentBlockInd this.complexColumnParentBlockIndexes = complexColumnParentBlockIndexes; } - public ProjectionDimension[] getQueryDimensions() { - return queryDimensions; + public ProjectionDimension[] getProjectionDimensions() { + return projectionDimensions; } - public void setQueryDimensions(ProjectionDimension[] queryDimensions) { - this.queryDimensions = queryDimensions; + public void setProjectionDimensions(ProjectionDimension[] projectionDimensions) { + this.projectionDimensions = projectionDimensions; } - public ProjectionMeasure[] getQueryMeasures() { - return queryMeasures; + public ProjectionMeasure[] getProjectionMeasures() { + return projectionMeasures; } - public void setQueryMeasures(ProjectionMeasure[] queryMeasures) { - this.queryMeasures = queryMeasures; + public void setProjectionMeasures(ProjectionMeasure[] projectionMeasures) { + this.projectionMeasures = projectionMeasures; } /** diff --git a/core/src/main/java/org/apache/carbondata/core/scan/executor/util/QueryUtil.java b/core/src/main/java/org/apache/carbondata/core/scan/executor/util/QueryUtil.java index a64d61875b7..710b8af9769 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/executor/util/QueryUtil.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/executor/util/QueryUtil.java @@ -551,10 +551,10 @@ public static boolean searchInArray(int[] data, int key) { * stored in bit level */ private static Map> getColumnGroupAndItsOrdinalMapping( - List origdimensions) { + List origDimensions) { - List dimensions = new ArrayList(origdimensions.size()); - dimensions.addAll(origdimensions); + List dimensions = new ArrayList<>(origDimensions.size()); + dimensions.addAll(origDimensions); /* * sort based on column group id */ diff --git a/core/src/main/java/org/apache/carbondata/core/scan/executor/util/RestructureUtil.java b/core/src/main/java/org/apache/carbondata/core/scan/executor/util/RestructureUtil.java index a5d0655e6fa..4874f1c0646 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/executor/util/RestructureUtil.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/executor/util/RestructureUtil.java @@ -88,7 +88,7 @@ public static List createDimensionInfoAndGetCurrentBlockQue .setScale(queryDimension.getDimension().getColumnSchema().getScale()); tableDimension.getColumnSchema() .setDefaultValue(queryDimension.getDimension().getDefaultValue()); - currentBlockDimension.setProjectionOrdinal(queryDimension.getProjectionOrdinal()); + currentBlockDimension.setOrdinal(queryDimension.getOrdinal()); presentDimension.add(currentBlockDimension); isDimensionExists[dimIndex] = true; break; @@ -104,7 +104,7 @@ public static List createDimensionInfoAndGetCurrentBlockQue ProjectionDimension currentBlockDimension = new ProjectionDimension(tableDimension); // TODO: for complex dimension set scale and precision by traversing // the child dimensions - currentBlockDimension.setProjectionOrdinal(queryDimension.getProjectionOrdinal()); + currentBlockDimension.setOrdinal(queryDimension.getOrdinal()); presentDimension.add(currentBlockDimension); isDimensionExists[dimIndex] = true; break; @@ -348,7 +348,7 @@ public static List createMeasureInfoAndGetCurrentBlockQueryMe carbonMeasure.getColumnSchema().setScale(queryMeasure.getMeasure().getScale()); carbonMeasure.getColumnSchema() .setDefaultValue(queryMeasure.getMeasure().getDefaultValue()); - currentBlockMeasure.setProjectionOrdinal(queryMeasure.getProjectionOrdinal()); + currentBlockMeasure.setOrdinal(queryMeasure.getOrdinal()); presentMeasure.add(currentBlockMeasure); measureOrdinalList.add(carbonMeasure.getOrdinal()); measureExistsInCurrentBlock[index] = true; diff --git a/core/src/main/java/org/apache/carbondata/core/scan/expression/RangeExpressionEvaluator.java b/core/src/main/java/org/apache/carbondata/core/scan/expression/RangeExpressionEvaluator.java index e8429440ce7..585bf60878e 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/expression/RangeExpressionEvaluator.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/expression/RangeExpressionEvaluator.java @@ -236,8 +236,6 @@ && eligibleForRangeExpConv(currentNode))) { private void addFilterExpressionMap(Map> filterExpressionMap, Expression currentNode, Expression parentNode) { String colName = getColumnName(currentNode); - DataType dataType = getLiteralDataType(currentNode); - Object literalVal = getLiteralValue(currentNode); ExpressionType expType = getExpressionType(currentNode); FilterModificationNode filterExpression = diff --git a/core/src/main/java/org/apache/carbondata/core/scan/model/ProjectionColumn.java b/core/src/main/java/org/apache/carbondata/core/scan/model/ProjectionColumn.java new file mode 100644 index 00000000000..0768221e94d --- /dev/null +++ b/core/src/main/java/org/apache/carbondata/core/scan/model/ProjectionColumn.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.carbondata.core.scan.model; + +/** + * Contains information for a column for projection + */ +public class ProjectionColumn { + + /** + * name of the column + */ + protected String columnName; + + /** + * query order in which result of the query will be send + */ + private int projectionOrdinal; + + ProjectionColumn(String columnName) { + this.columnName = columnName; + } + + /** + * @return the columnName + */ + public String getColumnName() { + return columnName; + } + + /** + * @return the projectionOrdinal + */ + public int getOrdinal() { + return projectionOrdinal; + } + + /** + * @param projectionOrdinal the projectionOrdinal to set + */ + public void setOrdinal(int projectionOrdinal) { + this.projectionOrdinal = projectionOrdinal; + } + +} \ No newline at end of file diff --git a/core/src/main/java/org/apache/carbondata/core/scan/model/ProjectionDimension.java b/core/src/main/java/org/apache/carbondata/core/scan/model/ProjectionDimension.java new file mode 100644 index 00000000000..806de857b42 --- /dev/null +++ b/core/src/main/java/org/apache/carbondata/core/scan/model/ProjectionDimension.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.carbondata.core.scan.model; + +import org.apache.carbondata.core.metadata.schema.table.column.CarbonDimension; + +/** + * dimension column which holds the information about the column + * this is done to avoid heavy object serialization + */ +public class ProjectionDimension extends ProjectionColumn { + + /** + * actual dimension column + */ + private CarbonDimension dimension; + + public ProjectionDimension(CarbonDimension dimension) { + super(dimension.getColName()); + this.dimension = dimension; + } + + /** + * @return the dimension + */ + public CarbonDimension getDimension() { + return dimension; + } + +} diff --git a/core/src/main/java/org/apache/carbondata/core/scan/model/ProjectionMeasure.java b/core/src/main/java/org/apache/carbondata/core/scan/model/ProjectionMeasure.java new file mode 100644 index 00000000000..93d9c82dc9a --- /dev/null +++ b/core/src/main/java/org/apache/carbondata/core/scan/model/ProjectionMeasure.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.carbondata.core.scan.model; + +import org.apache.carbondata.core.metadata.schema.table.column.CarbonMeasure; + +/** + * query plan measure, this class will holds the information + * about measure present in the query, this is done to avoid the serialization + * of the heavy object + */ +public class ProjectionMeasure extends ProjectionColumn { + + /** + * actual carbon measure object + */ + private CarbonMeasure measure; + + public ProjectionMeasure(CarbonMeasure measure) { + super(measure.getColName()); + this.measure = measure; + } + + /** + * @return the measure + */ + public CarbonMeasure getMeasure() { + return measure; + } + +} diff --git a/core/src/main/java/org/apache/carbondata/core/scan/model/QueryModel.java b/core/src/main/java/org/apache/carbondata/core/scan/model/QueryModel.java index 4e3b7f5bef4..ffef03fb7bd 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/model/QueryModel.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/model/QueryModel.java @@ -17,7 +17,6 @@ package org.apache.carbondata.core.scan.model; -import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -46,17 +45,13 @@ * about the query, This will be sent from driver to executor ' * This will be refereed to executing the query. */ -public class QueryModel implements Serializable { +public class QueryModel { - /** - * serialization version - */ - private static final long serialVersionUID = -4674677234007089052L; /** * this will hold the information about the dictionary dimension * which to */ - public transient Map columnToDictionaryMapping; + private transient Map columnToDictionaryMapping; /** * list of projection columns in query */ @@ -200,10 +195,10 @@ public CarbonColumn[] getProjectionColumns() { CarbonColumn[] carbonColumns = new CarbonColumn[getProjectionDimensions().size() + getProjectionMeasures().size()]; for (ProjectionDimension dimension : getProjectionDimensions()) { - carbonColumns[dimension.getProjectionOrdinal()] = dimension.getDimension(); + carbonColumns[dimension.getOrdinal()] = dimension.getDimension(); } for (ProjectionMeasure msr : getProjectionMeasures()) { - carbonColumns[msr.getProjectionOrdinal()] = msr.getMeasure(); + carbonColumns[msr.getOrdinal()] = msr.getMeasure(); } return carbonColumns; } diff --git a/core/src/main/java/org/apache/carbondata/core/scan/model/QueryProjection.java b/core/src/main/java/org/apache/carbondata/core/scan/model/QueryProjection.java index 82b4b686921..d4496e06499 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/model/QueryProjection.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/model/QueryProjection.java @@ -17,7 +17,6 @@ package org.apache.carbondata.core.scan.model; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -28,11 +27,7 @@ /** * Contains projection columns in the query */ -public class QueryProjection implements Serializable { - /** - * - */ - private static final long serialVersionUID = -9036044826928017164L; +public class QueryProjection { /** * List of dimensions. @@ -68,7 +63,7 @@ public List getDimensions() { public void addDimension(CarbonDimension dimension, int queryOrdinal) { ProjectionDimension queryDimension = new ProjectionDimension(dimension); - queryDimension.setProjectionOrdinal(queryOrdinal); + queryDimension.setOrdinal(queryOrdinal); this.dimensions.add(queryDimension); } @@ -81,7 +76,7 @@ public List getMeasures() { public void addMeasure(CarbonMeasure measure, int queryOrdinal) { ProjectionMeasure queryMeasure = new ProjectionMeasure(measure); - queryMeasure.setProjectionOrdinal(queryOrdinal); + queryMeasure.setOrdinal(queryOrdinal); this.measures.add(queryMeasure); } diff --git a/core/src/main/java/org/apache/carbondata/core/scan/result/BlockletScannedResult.java b/core/src/main/java/org/apache/carbondata/core/scan/result/BlockletScannedResult.java index 4fb25195585..d87611191dc 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/result/BlockletScannedResult.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/result/BlockletScannedResult.java @@ -143,7 +143,7 @@ public BlockletScannedResult(BlockExecutionInfo blockExecutionInfo) { this.columnGroupKeyStructureInfo = blockExecutionInfo.getColumnGroupToKeyStructureInfo(); this.complexParentIndexToQueryMap = blockExecutionInfo.getComlexDimensionInfoMap(); this.complexParentBlockIndexes = blockExecutionInfo.getComplexColumnParentBlockIndexes(); - this.totalDimensionsSize = blockExecutionInfo.getQueryDimensions().length; + this.totalDimensionsSize = blockExecutionInfo.getProjectionDimensions().length; this.deletedRecordMap = blockExecutionInfo.getDeletedRecordsMap(); } diff --git a/core/src/test/java/org/apache/carbondata/core/scan/collector/impl/RawBasedResultCollectorTest.java b/core/src/test/java/org/apache/carbondata/core/scan/collector/impl/RawBasedResultCollectorTest.java index 437cd339f9a..be9141013f5 100644 --- a/core/src/test/java/org/apache/carbondata/core/scan/collector/impl/RawBasedResultCollectorTest.java +++ b/core/src/test/java/org/apache/carbondata/core/scan/collector/impl/RawBasedResultCollectorTest.java @@ -71,10 +71,10 @@ public class RawBasedResultCollectorTest { // ProjectionDimension queryDimension4 = new ProjectionDimension("QDCol4"); // queryDimension4.setQueryOrder(4); // queryDimension4.setDimension(new CarbonDimension(columnSchema, 3, 0, 0, 0)); -// blockExecutionInfo.setQueryDimensions( +// blockExecutionInfo.setProjectionDimensions( // new ProjectionDimension[] { queryDimension1, queryDimension2, queryDimension3, // queryDimension4 }); -// blockExecutionInfo.setQueryMeasures( +// blockExecutionInfo.setProjectionMeasures( // new ProjectionMeasure[] { queryMeasure1, queryMeasure2, queryMeasure3, queryMeasure4 }); // blockExecutionInfo.setFixedKeyUpdateRequired(true); // blockExecutionInfo.setMeasureInfo(aggregatorInfo); diff --git a/integration/presto/src/main/java/org/apache/carbondata/presto/PrestoCarbonVectorizedRecordReader.java b/integration/presto/src/main/java/org/apache/carbondata/presto/PrestoCarbonVectorizedRecordReader.java index dcc4999d687..a1907dbe46f 100644 --- a/integration/presto/src/main/java/org/apache/carbondata/presto/PrestoCarbonVectorizedRecordReader.java +++ b/integration/presto/src/main/java/org/apache/carbondata/presto/PrestoCarbonVectorizedRecordReader.java @@ -172,16 +172,16 @@ private void initBatch() { if (dim.getDimension().hasEncoding(Encoding.DIRECT_DICTIONARY)) { DirectDictionaryGenerator generator = DirectDictionaryKeyGeneratorFactory .getDirectDictionaryGenerator(dim.getDimension().getDataType()); - fields[dim.getProjectionOrdinal()] = new StructField(dim.getColumnName(), + fields[dim.getOrdinal()] = new StructField(dim.getColumnName(), generator.getReturnType()); } else if (!dim.getDimension().hasEncoding(Encoding.DICTIONARY)) { - fields[dim.getProjectionOrdinal()] = new StructField(dim.getColumnName(), + fields[dim.getOrdinal()] = new StructField(dim.getColumnName(), dim.getDimension().getDataType()); } else if (dim.getDimension().isComplex()) { - fields[dim.getProjectionOrdinal()] = new StructField(dim.getColumnName(), + fields[dim.getOrdinal()] = new StructField(dim.getColumnName(), dim.getDimension().getDataType()); } else { - fields[dim.getProjectionOrdinal()] = new StructField(dim.getColumnName(), + fields[dim.getOrdinal()] = new StructField(dim.getColumnName(), DataTypes.INT); } } @@ -190,13 +190,13 @@ private void initBatch() { DataType dataType = msr.getMeasure().getDataType(); if (dataType == DataTypes.BOOLEAN || dataType == DataTypes.SHORT || dataType == DataTypes.INT || dataType == DataTypes.LONG) { - fields[msr.getProjectionOrdinal()] = + fields[msr.getOrdinal()] = new StructField(msr.getColumnName(), msr.getMeasure().getDataType()); } else if (DataTypes.isDecimal(dataType)) { - fields[msr.getProjectionOrdinal()] = + fields[msr.getOrdinal()] = new StructField(msr.getColumnName(), msr.getMeasure().getDataType()); } else { - fields[msr.getProjectionOrdinal()] = new StructField(msr.getColumnName(), DataTypes.DOUBLE); + fields[msr.getOrdinal()] = new StructField(msr.getColumnName(), DataTypes.DOUBLE); } } diff --git a/integration/spark2/src/main/java/org/apache/carbondata/spark/vectorreader/VectorizedCarbonRecordReader.java b/integration/spark2/src/main/java/org/apache/carbondata/spark/vectorreader/VectorizedCarbonRecordReader.java index e28adb69541..73da87850d4 100644 --- a/integration/spark2/src/main/java/org/apache/carbondata/spark/vectorreader/VectorizedCarbonRecordReader.java +++ b/integration/spark2/src/main/java/org/apache/carbondata/spark/vectorreader/VectorizedCarbonRecordReader.java @@ -222,18 +222,18 @@ private void initBatch(MemoryMode memMode) { if (dim.getDimension().hasEncoding(Encoding.DIRECT_DICTIONARY)) { DirectDictionaryGenerator generator = DirectDictionaryKeyGeneratorFactory .getDirectDictionaryGenerator(dim.getDimension().getDataType()); - fields[dim.getProjectionOrdinal()] = new StructField(dim.getColumnName(), + fields[dim.getOrdinal()] = new StructField(dim.getColumnName(), CarbonScalaUtil.convertCarbonToSparkDataType(generator.getReturnType()), true, null); } else if (!dim.getDimension().hasEncoding(Encoding.DICTIONARY)) { - fields[dim.getProjectionOrdinal()] = new StructField(dim.getColumnName(), + fields[dim.getOrdinal()] = new StructField(dim.getColumnName(), CarbonScalaUtil.convertCarbonToSparkDataType(dim.getDimension().getDataType()), true, null); } else if (dim.getDimension().isComplex()) { - fields[dim.getProjectionOrdinal()] = new StructField(dim.getColumnName(), + fields[dim.getOrdinal()] = new StructField(dim.getColumnName(), CarbonScalaUtil.convertCarbonToSparkDataType(dim.getDimension().getDataType()), true, null); } else { - fields[dim.getProjectionOrdinal()] = new StructField(dim.getColumnName(), + fields[dim.getOrdinal()] = new StructField(dim.getColumnName(), CarbonScalaUtil.convertCarbonToSparkDataType(DataTypes.INT), true, null); } } @@ -243,15 +243,15 @@ private void initBatch(MemoryMode memMode) { DataType dataType = msr.getMeasure().getDataType(); if (dataType == DataTypes.BOOLEAN || dataType == DataTypes.SHORT || dataType == DataTypes.INT || dataType == DataTypes.LONG) { - fields[msr.getProjectionOrdinal()] = new StructField(msr.getColumnName(), + fields[msr.getOrdinal()] = new StructField(msr.getColumnName(), CarbonScalaUtil.convertCarbonToSparkDataType(msr.getMeasure().getDataType()), true, null); } else if (DataTypes.isDecimal(dataType)) { - fields[msr.getProjectionOrdinal()] = new StructField(msr.getColumnName(), + fields[msr.getOrdinal()] = new StructField(msr.getColumnName(), new DecimalType(msr.getMeasure().getPrecision(), msr.getMeasure().getScale()), true, null); } else { - fields[msr.getProjectionOrdinal()] = new StructField(msr.getColumnName(), + fields[msr.getOrdinal()] = new StructField(msr.getColumnName(), CarbonScalaUtil.convertCarbonToSparkDataType(DataTypes.DOUBLE), true, null); } }