/** * Method to check for filter column in min/max cache columns list * * @param minMaxCacheColumns * @param filterColumn * @return */ private static boolean filterColumnExistsInMinMaxColumnList(List<CarbonColumn> minMaxCacheColumns, CarbonColumn filterColumn) { for (CarbonColumn column : minMaxCacheColumns) { if (filterColumn.getColumnId().equalsIgnoreCase(column.getColumnId())) { return true; } } return false; }
/** * Method to check whether the filter dimension exists in the cached dimensions for a table * * @param carbonDimensionsToBeCached * @param filterColumn * @return */ private static int getFilterColumnIndexInCachedColumns( List<CarbonColumn> carbonDimensionsToBeCached, CarbonColumn filterColumn) { int columnIndexInMinMaxByteArray = -1; int columnCounter = 0; for (CarbonColumn cachedColumn : carbonDimensionsToBeCached) { if (cachedColumn.getColumnId().equalsIgnoreCase(filterColumn.getColumnId())) { columnIndexInMinMaxByteArray = columnCounter; break; } columnCounter++; } return columnIndexInMinMaxByteArray; }
/** * Match the columns for transactional and non transactional tables * @param isTransactionalTable * @param queryColumn * @param tableColumn * @return */ private static boolean isColumnMatches(boolean isTransactionalTable, CarbonColumn queryColumn, CarbonColumn tableColumn) { // If it is non transactional table just check the column names, no need to validate // column id as multiple sdk's output placed in a single folder doesn't have same // column ID but can have same column name if (tableColumn.getDataType().isComplexType() && !(tableColumn.getDataType().getId() == DataTypes.ARRAY_TYPE_ID)) { if (tableColumn.getColumnId().equalsIgnoreCase(queryColumn.getColumnId())) { return true; } else { return isColumnMatchesStruct(tableColumn, queryColumn); } } else { return (tableColumn.getColumnId().equalsIgnoreCase(queryColumn.getColumnId()) || ( !isTransactionalTable && tableColumn.getColName() .equalsIgnoreCase(queryColumn.getColName()))); } }
/** * This method will initialize the measure info for the current block to be * used for filtering the data */ private void initMeasureChunkIndexes() { for (int i = 0; i < msrColEvalutorInfoList.size(); i++) { // find the measure in the current block measures list CarbonMeasure measureFromCurrentBlock = segmentProperties.getMeasureFromCurrentBlock( msrColEvalutorInfoList.get(i).getCarbonColumn().getColumnId()); if (null != measureFromCurrentBlock) { msrColEvalutorInfoList.get(i).setColumnIndex(measureFromCurrentBlock.getOrdinal()); this.measureChunkIndex[i] = msrColEvalutorInfoList.get(i).getColumnIndexInMinMaxByteArray(); isMeasurePresentInCurrentBlock[i] = true; } } }
public CarbonColumn(ColumnSchema columnSchema, int ordinal, int schemaOrdinal) { this.columnSchema = columnSchema; this.ordinal = ordinal; this.schemaOrdinal = schemaOrdinal; this.columnIdentifier = new ColumnIdentifier(getColumnId(), getColumnProperties(), getDataType()); }
if (carbonDimension != null) { if (carbonDimension.getColumnSchema().getColumnUniqueId() .equalsIgnoreCase(queryColumn.getColumnId())) { return true;
new ArrayDataType(carbonColumn.getColName(), parentName, carbonColumn.getColumnId(), carbonColumn.hasEncoding(Encoding.DICTIONARY)); for (CarbonDimension dimension : listOfChildDimensions) { new StructDataType(carbonColumn.getColName(), parentName, carbonColumn.getColumnId(), carbonColumn.hasEncoding(Encoding.DICTIONARY)); for (CarbonDimension dimension : dimensions) { return new PrimitiveDataType(carbonColumn, parentName, carbonColumn.getColumnId(), (CarbonDimension) carbonColumn, absoluteTableIdentifier, client, useOnePass, localCache, nullFormat, isEmptyBadRecords);