blob: 9755761335f081e48d8baf5dababa66cdf30a079 [file] [log] [blame]
/*
* 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.executor.infos;
import java.util.Map;
import org.apache.carbondata.core.datastore.DataRefNode;
import org.apache.carbondata.core.datastore.ReusableDataBuffer;
import org.apache.carbondata.core.datastore.block.AbstractIndex;
import org.apache.carbondata.core.mutate.DeleteDeltaVo;
import org.apache.carbondata.core.scan.filter.GenericQueryType;
import org.apache.carbondata.core.scan.filter.executer.FilterExecutor;
import org.apache.carbondata.core.scan.model.ProjectionDimension;
import org.apache.carbondata.core.scan.model.ProjectionMeasure;
import org.apache.carbondata.core.stats.QueryStatisticsModel;
/**
* Below class will have all the properties which needed during query execution
* for one block
*/
public class BlockExecutionInfo {
/**
* block on which query will be executed
*/
private AbstractIndex blockIndex;
/**
* below to store all the information required for measures during query
* execution
*/
private MeasureInfo measureInfo;
private String blockId;
/**
* total number of dimension in block
*/
private int totalNumberDimensionToRead;
/**
* total number of measure in block
*/
private int totalNumberOfMeasureToRead;
/**
* will be used to read the dimension block from file
*/
private int[][] allSelectedDimensionColumnIndexRange;
/**
* will be used to read the measure block from file
*/
private int[][] allSelectedMeasureIndexRange;
/**
* list of dimension present in the projection
*/
private int[] projectionListDimensionIndexes;
/**
* list of measure present in the projection
*/
private int[] projectionListMeasureIndexes;
/**
* first block from which query execution will start
*/
private DataRefNode firstDataBlock;
/**
* number of block to be scanned in the query
*/
private long numberOfBlockToScan;
/**
* key size of the fixed length dimension column
*/
private int fixedLengthKeySize;
/**
* dictionary column block indexes based on query
*/
private int[] dictionaryColumnChunkIndex;
/**
* no dictionary column block indexes in based on the query order
*/
private int[] noDictionaryColumnChunkIndexes;
/**
* filter tree to execute the filter
*/
private FilterExecutor filterExecutorTree;
/**
* whether it needs only raw byte records with out aggregation.
*/
private boolean isRawRecordDetailQuery;
/**
* start index of blocklets
*/
private int startBlockletIndex;
/**
* number of blocklet to be scanned
*/
private int numberOfBlockletToScan;
/**
* complexParentIndexToQueryMap
*/
private Map<Integer, GenericQueryType> complexParentIndexToQueryMap;
/**
* complex dimension parent block indexes;
*/
private int[] complexColumnParentBlockIndexes;
/**
* @return the tableBlock
*/
public AbstractIndex getDataBlock() {
return blockIndex;
}
/**
* list of dimension present in the current block. This will be
* different in case of restructured block
*/
private ProjectionDimension[] projectionDimensions;
/**
* list of dimension selected for in query
*/
private ProjectionDimension[] actualQueryDimensions;
/**
* list of dimension present in the current block. This will be
* different in case of restructured block
*/
private ProjectionMeasure[] projectionMeasures;
/**
* list of measure selected in query
*/
private ProjectionMeasure[] actualQueryMeasures;
/**
* variable to maintain dimension existence and default value info
*/
private DimensionInfo dimensionInfo;
/**
* whether it needs to read data in vector/columnar format.
*/
private boolean vectorBatchCollector;
/**
* flag to specify that whether the current block is with latest schema or old schema
*/
private boolean isRestructuredBlock;
/**
* delete delta file path
*/
private String[] deleteDeltaFilePath;
/**
* whether to prefetch the blocklet data while scanning
*/
private boolean prefetchBlocklet = true;
private Map<String, DeleteDeltaVo> deletedRecordsMap;
/**
* whether it require to output the row id
*/
private boolean requiredRowId;
/**
* model for collecting query stats
*/
private QueryStatisticsModel queryStatisticsModel;
/**
* It fills the vector directly from decoded column page with out any staging and conversions
*/
private boolean isDirectVectorFill;
private ReusableDataBuffer[] dimensionReusableDataBuffer;
private ReusableDataBuffer[] measureReusableDataBuffer;
/**
* It is used to read only the deleted data of a particular version. It will be used to get the
* old updated/deleted data before update.
*/
private boolean readOnlyDelta;
/**
* @param blockIndex the tableBlock to set
*/
public void setDataBlock(AbstractIndex blockIndex) {
this.blockIndex = blockIndex;
}
/**
* @return the aggregatorInfos
*/
public MeasureInfo getMeasureInfo() {
return measureInfo;
}
/**
* @param measureInfo the aggregatorInfos to set
*/
public void setMeasureInfo(MeasureInfo measureInfo) {
this.measureInfo = measureInfo;
}
/**
* @return the totalNumberDimensionToRead
*/
public int getTotalNumberDimensionToRead() {
return totalNumberDimensionToRead;
}
/**
* @param totalNumberDimensionToRead the totalNumberDimensionToRead to set
*/
public void setTotalNumberDimensionToRead(int totalNumberDimensionToRead) {
this.totalNumberDimensionToRead = totalNumberDimensionToRead;
}
/**
* @return the totalNumberOfMeasureToRead
*/
public int getTotalNumberOfMeasureToRead() {
return totalNumberOfMeasureToRead;
}
/**
* @param totalNumberOfMeasureToRead the totalNumberOfMeasureToRead to set
*/
public void setTotalNumberOfMeasureToRead(int totalNumberOfMeasureToRead) {
this.totalNumberOfMeasureToRead = totalNumberOfMeasureToRead;
}
/**
* @return the allSelectedDimensionColumnIndexRange
*/
public int[][] getAllSelectedDimensionColumnIndexRange() {
return allSelectedDimensionColumnIndexRange;
}
/**
* @param allSelectedDimensionColumnIndexRange the allSelectedDimensionColumnIndexRange to set
*/
public void setAllSelectedDimensionColumnIndexRange(int[][] selectedDimensionColumnIndexRange) {
this.allSelectedDimensionColumnIndexRange = selectedDimensionColumnIndexRange;
}
/**
* @return the allSelectedMeasureIndexRange
*/
public int[][] getAllSelectedMeasureIndexRange() {
return allSelectedMeasureIndexRange;
}
/**
* @param allSelectedMeasureIndexRange the allSelectedMeasureIndexRange to set
*/
public void setAllSelectedMeasureIndexRange(int[][] allSelectedMeasureIndexRange) {
this.allSelectedMeasureIndexRange = allSelectedMeasureIndexRange;
}
/**
* @return the firstDataBlock
*/
public DataRefNode getFirstDataBlock() {
return firstDataBlock;
}
/**
* @param firstDataBlock the firstDataBlock to set
*/
public void setFirstDataBlock(DataRefNode firstDataBlock) {
this.firstDataBlock = firstDataBlock;
}
/**
* @return the numberOfBlockToScan
*/
public long getNumberOfBlockToScan() {
return numberOfBlockToScan;
}
/**
* @param numberOfBlockToScan the numberOfBlockToScan to set
*/
public void setNumberOfBlockToScan(long numberOfBlockToScan) {
this.numberOfBlockToScan = numberOfBlockToScan;
}
/**
* @return the fixedLengthKeySize
*/
public int getFixedLengthKeySize() {
return fixedLengthKeySize;
}
/**
* @param fixedLengthKeySize the fixedLengthKeySize to set
*/
public void setFixedLengthKeySize(int fixedLengthKeySize) {
this.fixedLengthKeySize = fixedLengthKeySize;
}
/**
* @return the filterEvaluatorTree
*/
public FilterExecutor getFilterExecutorTree() {
return filterExecutorTree;
}
/**
* @param filterExecutorTree the filterEvaluatorTree to set
*/
public void setFilterExecutorTree(FilterExecutor filterExecutorTree) {
this.filterExecutorTree = filterExecutorTree;
}
/**
* @return the dictionaryColumnChunkIndex
*/
public int[] getDictionaryColumnChunkIndex() {
return dictionaryColumnChunkIndex;
}
/**
* @param dictionaryColumnChunkIndex the dictionaryColumnChunkIndex to set
*/
public void setDictionaryColumnChunkIndex(int[] dictionaryColumnChunkIndex) {
this.dictionaryColumnChunkIndex = dictionaryColumnChunkIndex;
}
/**
* @return the noDictionaryColumnChunkIndexes
*/
public int[] getNoDictionaryColumnChunkIndexes() {
return noDictionaryColumnChunkIndexes;
}
/**
* @param noDictionaryColumnChunkIndexes the noDictionaryColumnChunkIndexes to set
*/
public void setNoDictionaryColumnChunkIndexes(int[] noDictionaryColumnChunkIndexes) {
this.noDictionaryColumnChunkIndexes = noDictionaryColumnChunkIndexes;
}
public boolean isRawRecordDetailQuery() {
return isRawRecordDetailQuery;
}
public void setRawRecordDetailQuery(boolean rawRecordDetailQuery) {
isRawRecordDetailQuery = rawRecordDetailQuery;
}
/**
* @return the complexParentIndexToQueryMap
*/
public Map<Integer, GenericQueryType> getComplexDimensionInfoMap() {
return complexParentIndexToQueryMap;
}
/**
* @param complexDimensionInfoMap the complexParentIndexToQueryMap to set
*/
public void setComplexDimensionInfoMap(Map<Integer, GenericQueryType> complexDimensionInfoMap) {
this.complexParentIndexToQueryMap = complexDimensionInfoMap;
}
/**
* @return the complexColumnParentBlockIndexes
*/
public int[] getComplexColumnParentBlockIndexes() {
return complexColumnParentBlockIndexes;
}
/**
* @param complexColumnParentBlockIndexes the complexColumnParentBlockIndexes to set
*/
public void setComplexColumnParentBlockIndexes(int[] complexColumnParentBlockIndexes) {
this.complexColumnParentBlockIndexes = complexColumnParentBlockIndexes;
}
public ProjectionDimension[] getProjectionDimensions() {
return projectionDimensions;
}
public void setProjectionDimensions(ProjectionDimension[] projectionDimensions) {
this.projectionDimensions = projectionDimensions;
}
public ProjectionMeasure[] getProjectionMeasures() {
return projectionMeasures;
}
public void setProjectionMeasures(ProjectionMeasure[] projectionMeasures) {
this.projectionMeasures = projectionMeasures;
}
/**
* The method to set the number of blocklets to be scanned
*
* @param numberOfBlockletToScan
*/
public void setNumberOfBlockletToScan(int numberOfBlockletToScan) {
this.numberOfBlockletToScan = numberOfBlockletToScan;
}
/**
* get the no of blocklet to be scanned
*
* @return
*/
public int getNumberOfBlockletToScan() {
return numberOfBlockletToScan;
}
/**
* returns the blocklet index to be scanned
*
* @return
*/
public int getStartBlockletIndex() {
return startBlockletIndex;
}
/**
* set the blocklet index to be scanned
*
* @param startBlockletIndex
*/
public void setStartBlockletIndex(int startBlockletIndex) {
this.startBlockletIndex = startBlockletIndex;
}
public boolean isVectorBatchCollector() {
return vectorBatchCollector;
}
public void setVectorBatchCollector(boolean vectorBatchCollector) {
this.vectorBatchCollector = vectorBatchCollector;
}
// Return file name and path, like Part0/Segment_0/part-0-0_batchno0-0-1517155583332.carbondata
public String getBlockIdString() {
return blockId;
}
public void setBlockId(String blockId) {
this.blockId = blockId;
}
public boolean isRestructuredBlock() {
return isRestructuredBlock;
}
public void setRestructuredBlock(boolean restructuredBlock) {
isRestructuredBlock = restructuredBlock;
}
public DimensionInfo getDimensionInfo() {
return dimensionInfo;
}
public void setDimensionInfo(DimensionInfo dimensionInfo) {
this.dimensionInfo = dimensionInfo;
}
public ProjectionDimension[] getActualQueryDimensions() {
return actualQueryDimensions;
}
public void setActualQueryDimensions(ProjectionDimension[] actualQueryDimensions) {
this.actualQueryDimensions = actualQueryDimensions;
}
public ProjectionMeasure[] getActualQueryMeasures() {
return actualQueryMeasures;
}
public void setActualQueryMeasures(ProjectionMeasure[] actualQueryMeasures) {
this.actualQueryMeasures = actualQueryMeasures;
}
public int[] getProjectionListDimensionIndexes() {
return projectionListDimensionIndexes;
}
public void setProjectionListDimensionIndexes(int[] projectionListDimensionIndexes) {
this.projectionListDimensionIndexes = projectionListDimensionIndexes;
}
public int[] getProjectionListMeasureIndexes() {
return projectionListMeasureIndexes;
}
public void setProjectionListMeasureIndexes(int[] projectionListMeasureIndexes) {
this.projectionListMeasureIndexes = projectionListMeasureIndexes;
}
/**
* @return delete delta files
*/
public String[] getDeleteDeltaFilePath() {
return deleteDeltaFilePath;
}
/**
* set the delete delta files
* @param deleteDeltaFilePath
*/
public void setDeleteDeltaFilePath(String[] deleteDeltaFilePath) {
this.deleteDeltaFilePath = deleteDeltaFilePath;
}
/**
* @return deleted record map
*/
public Map<String, DeleteDeltaVo> getDeletedRecordsMap() {
return deletedRecordsMap;
}
/**
* @param deletedRecordsMap
*/
public void setDeletedRecordsMap(Map<String, DeleteDeltaVo> deletedRecordsMap) {
this.deletedRecordsMap = deletedRecordsMap;
}
public boolean isPrefetchBlocklet() {
return prefetchBlocklet;
}
public void setPrefetchBlocklet(boolean prefetchBlocklet) {
this.prefetchBlocklet = prefetchBlocklet;
}
public boolean isRequiredRowId() {
return requiredRowId;
}
public void setRequiredRowId(boolean requiredRowId) {
this.requiredRowId = requiredRowId;
}
public QueryStatisticsModel getQueryStatisticsModel() {
return queryStatisticsModel;
}
public void setQueryStatisticsModel(QueryStatisticsModel queryStatisticsModel) {
this.queryStatisticsModel = queryStatisticsModel;
}
public boolean isDirectVectorFill() {
return isDirectVectorFill && !isRestructuredBlock;
}
public void setDirectVectorFill(boolean directVectorFill) {
isDirectVectorFill = directVectorFill;
}
public ReusableDataBuffer[] getDimensionReusableDataBuffer() {
return dimensionReusableDataBuffer;
}
public void setDimensionReusableDataBuffer(ReusableDataBuffer[] dimensionReusableDataBuffer) {
this.dimensionReusableDataBuffer = dimensionReusableDataBuffer;
}
public ReusableDataBuffer[] getMeasureReusableDataBuffer() {
return measureReusableDataBuffer;
}
public void setMeasureReusableDataBuffer(ReusableDataBuffer[] measureReusableDataBuffer) {
this.measureReusableDataBuffer = measureReusableDataBuffer;
}
public boolean isReadOnlyDelta() {
return readOnlyDelta;
}
public void setReadOnlyDelta(boolean readOnlyDelta) {
this.readOnlyDelta = readOnlyDelta;
}
}