private DataMapExprWrapper chooseFGDataMap( CarbonTable table, FilterResolverIntf filterInterface) { DataMapChooser chooser = null; try { chooser = new DataMapChooser(table); return chooser.chooseFGDataMap(filterInterface); } catch (IOException e) { LOG.audit(e.getMessage()); return null; } }
/** * Return a chosen FG datamap based on input filter. See {@link DataMapChooser} */ public DataMapExprWrapper chooseFGDataMap(FilterResolverIntf resolverIntf) { return chooseDataMap(DataMapLevel.FG, resolverIntf); }
private DataMapExprWrapper chooseDataMap(DataMapLevel level, FilterResolverIntf resolverIntf) { if (resolverIntf != null) { Expression expression = resolverIntf.getFilterExpression(); List<TableDataMap> datamaps = level == DataMapLevel.CG ? cgDataMaps : fgDataMaps; if (datamaps.size() > 0) { ExpressionTuple tuple = selectDataMap(expression, datamaps, resolverIntf); if (tuple.dataMapExprWrapper != null) { return tuple.dataMapExprWrapper; } } } return null; }
DataMapChooser chooser = new DataMapChooser(getOrCreateCarbonTable(job.getConfiguration())); DataMapExprWrapper cgDataMapExprWrapper = chooser.chooseCGDataMap(resolver); if (cgDataMapExprWrapper != null) { DataMapExprWrapper fgDataMapExprWrapper = chooser.chooseFGDataMap(resolver); if (fgDataMapExprWrapper != null) {
DataMapExprWrapper dataMapExprWrapper = null; if (DataMapStoreManager.getInstance().getAllDataMap(carbonTable).size() > 0) { DataMapChooser dataMapChooser = new DataMapChooser(carbonTable); dataMapExprWrapper = dataMapChooser.getAllDataMapsForClear(carbonTable); } else { return;
if (expression instanceof AndExpression) { AndExpression andExpression = (AndExpression) expression; ExpressionTuple left = selectDataMap(andExpression.getLeft(), allDataMap, filterResolverIntf.getLeft()); ExpressionTuple right = selectDataMap(andExpression.getRight(), allDataMap, filterResolverIntf.getRight()); Set<ExpressionType> filterExpressionTypes = new HashSet<>(); chooseDataMap(allDataMap, columnExpressions, filterExpressionTypes); TrueConditionalResolverImpl resolver = new TrueConditionalResolverImpl( new AndExpression(left.expression, right.expression), false, if (expression instanceof OrExpression) { OrExpression orExpression = (OrExpression) expression; ExpressionTuple left = selectDataMap(orExpression.getLeft(), allDataMap, filterResolverIntf.getLeft()); ExpressionTuple right = selectDataMap(orExpression.getRight(), allDataMap, filterResolverIntf.getRight()); default: ExpressionTuple tuple = new ExpressionTuple(); extractColumnExpression(expression, tuple.columnExpressions); Set<ExpressionType> filterExpressionTypes = new HashSet<>(); filterExpressionTypes.add(expression.getFilterExpressionType()); true); TableDataMap dataMap = chooseDataMap(allDataMap, tuple.columnExpressions, filterExpressionTypes); if (dataMap != null) {
private void extractColumnExpression(Expression expression, List<ColumnExpression> columnExpressions) { if (expression instanceof ColumnExpression) { columnExpressions.add((ColumnExpression) expression); } else if (expression instanceof MatchExpression) { // this is a special case for lucene // build a fake ColumnExpression to filter datamaps which contain target column // a Lucene query string is alike "column:query term" String[] queryItems = expression.getString().split(":", 2); if (queryItems.length == 2) { columnExpressions.add(new ColumnExpression(queryItems[0], null)); } } else if (expression != null) { List<Expression> children = expression.getChildren(); if (children != null && children.size() > 0) { for (Expression exp : children) { if (exp != null && exp.getFilterExpressionType() != ExpressionType.UNKNOWN) { extractColumnExpression(exp, columnExpressions); } } } } }
private TableDataMap chooseDataMap(List<TableDataMap> allDataMap, List<ColumnExpression> columnExpressions, Set<ExpressionType> expressionTypes) { List<DataMapTuple> tuples = new ArrayList<>(); for (TableDataMap dataMap : allDataMap) { if (null != dataMap.getDataMapFactory().getMeta() && contains( dataMap.getDataMapFactory().getMeta(), columnExpressions, expressionTypes)) { tuples.add( new DataMapTuple(dataMap.getDataMapFactory().getMeta().getIndexedColumns().size(), dataMap)); } } if (tuples.size() > 0) { Collections.sort(tuples); return tuples.get(0).dataMap; } return null; }
/** * Return a chosen datamap based on input filter. See {@link DataMapChooser} */ public DataMapExprWrapper choose(FilterResolverIntf filter) { if (filter != null) { Expression expression = filter.getFilterExpression(); // First check for FG datamaps if any exist ExpressionTuple tuple = selectDataMap(expression, fgDataMaps, filter); if (tuple.dataMapExprWrapper == null) { // Check for CG datamap tuple = selectDataMap(expression, cgDataMaps, filter); } if (tuple.dataMapExprWrapper != null) { return tuple.dataMapExprWrapper; } } // Return the default datamap if no other datamap exists. return new DataMapExprWrapperImpl( DataMapStoreManager.getInstance().getDefaultDataMap(carbonTable), filter); }
/** * Return a chosen CG datamap based on input filter. See {@link DataMapChooser} */ public DataMapExprWrapper chooseCGDataMap(FilterResolverIntf resolverIntf) { return chooseDataMap(DataMapLevel.CG, resolverIntf); }