Package org.apache.pig.newplan.logical.expression

Examples of org.apache.pig.newplan.logical.expression.LogicalExpression


           
            @Override
            public void visit(UserFuncExpression userFunc) throws FrontendException {
                List<Operator> succs = userFunc.getPlan().getSuccessors(userFunc);
                if (succs==null) return;
                LogicalExpression succ = (LogicalExpression)succs.get(0);
                if (succ.getFieldSchema()!=null && succ.getFieldSchema().type==DataType.MAP)
                    fullMapUids.add(succ.getFieldSchema().uid);
            }
View Full Code Here


                if( predecessor instanceof LOCogroup ) {
                    for( ProjectExpression projExpr : projExprs ) {
                        // Need to merge filter condition and cogroup by expression;
                        LogicalExpressionPlan plan = ((LOCogroup) predecessor).getExpressionPlans().get( inputIndex ).iterator().next();
                        LogicalExpressionPlan copy = plan.deepCopy();
                        LogicalExpression root = (LogicalExpression)copy.getSinks().get( 0 );
                        List<Operator> predecessors = fPlan.getPredecessors( projExpr );
                        if( predecessors == null || predecessors.size() == 0 ) {
                            fPlan.remove( projExpr );
                            fPlan.add( root );
                        } else {
View Full Code Here

   
    String buildSampleOp(SourceLocation loc, String alias, String inputAlias, double value,
            SourceLocation valLoc) {
        LogicalExpressionPlan filterPlan = new LogicalExpressionPlan();
        //  Generate a filter condition.
        LogicalExpression konst = new ConstantExpression( filterPlan, value);
        konst.setLocation( valLoc );
        UserFuncExpression udf = new UserFuncExpression( filterPlan, new FuncSpec( RANDOM.class.getName() ) );
        new LessThanEqualExpression( filterPlan, udf, konst );
        LOFilter filter = new LOFilter( plan );
        return buildFilterOp( loc, filter, alias, inputAlias, filterPlan );
    }
View Full Code Here

        if( funcSpec == null ) {
            funcName = func.getClass().getName();
            funcSpec = new FuncSpec( funcName );
        }
       
        LogicalExpression le = new UserFuncExpression( plan, funcSpec, args );
        le.setLocation( loc );
        return le;
    }
View Full Code Here

            SourceLocation valLoc)
                    throws ParserValidationException {

        LogicalExpressionPlan filterPlan = new LogicalExpressionPlan();
        //  Generate a filter condition.
        LogicalExpression konst = new ConstantExpression( filterPlan, value);
        konst.setLocation( valLoc );
        UserFuncExpression udf = new UserFuncExpression( filterPlan, new FuncSpec( RANDOM.class.getName() ) );
        new LessThanExpression( filterPlan, udf, konst );
        LOFilter filter = new LOFilter( plan, true );
        return buildFilterOp( loc, filter, alias, inputAlias, filterPlan );
    }
View Full Code Here

    String buildSplitOtherwiseOp(SourceLocation loc, LOSplitOutput op, String alias, String inputAlias)
            throws ParserValidationException, PlanGenerationFailureException {
        LogicalExpressionPlan splitPlan = new LogicalExpressionPlan();
        Operator losplit = lookupOperator(inputAlias);
        LogicalExpression currentExpr = null;
        for (Operator losplitoutput : plan.getSuccessors(losplit)) {
            // take all the LOSplitOutput and negate their filter plans
            LogicalExpressionPlan fragment = ((LOSplitOutput) losplitoutput)
                    .getFilterPlan();
            try {
                if (OptimizerUtils.planHasNonDeterministicUdf(fragment))
                    throw new ParserValidationException(
                            intStream, loc, new FrontendException(op,
                                    "Can not use Otherwise in Split with an expression containing a @Nondeterministic UDF", 1131));
            } catch (FrontendException e) {
                e.printStackTrace();
                throw new PlanGenerationFailureException(intStream, loc, e);
            }
            LogicalExpression root = null;
            try {
                // get the root expression of the filter plan in LOSplitOutput and copy it
                root = ((LogicalExpression) fragment.getSources().get(0))
                        .deepCopy(splitPlan);
            } catch (FrontendException e) {
View Full Code Here

      for (int i = 0; i < lexpList.size(); i++) {
    // Retain the columns that needs to be pushed down.
    // Remove the dimension columns from the input column list
    // as it will be attached to CubeDimension UDF
    for (int j = 0; j < allExprPlan.size(); j++) {
        LogicalExpression lexp = (LogicalExpression) allExprPlan.get(j).getSources()
          .get(0);
        String colAlias = ((ProjectExpression) lexpList.get(i)).getColAlias();
        if (colAlias == null) {
      colAlias = ((ProjectExpression) lexpList.get(i)).getFieldSchema().alias;
        }

        String projExpAlias = null;
        try {
      projExpAlias = ((ProjectExpression) lexp).getColAlias();
        } catch (ClassCastException e) {
      // if it is not projection then it should be
      // UserFuncExpr.
      // ignore and continue till next ProjExpr is encountered
      continue;
        }
        if (colAlias.equals(projExpAlias) == true) {
      allExprPlan.remove(j);
        } else {
      // if projected exp alias is a namespaced alias
      if (projExpAlias.lastIndexOf(":") != -1) {
          projExpAlias = projExpAlias.substring(
            projExpAlias.lastIndexOf(":") + 1, projExpAlias.length());
          if (colAlias.equals(projExpAlias) == true) {
        allExprPlan.remove(j);
          }
      }
        }
    }
      }

      // Create UDF with user specified dimensions
      LogicalExpressionPlan uexpPlan = new LogicalExpressionPlan();
      if (operations.get(operIdx).equals("CUBE")) {
    new UserFuncExpression(uexpPlan, new FuncSpec(CubeDimensions.class.getName()),
            lexpList);
      } else {
    new UserFuncExpression(uexpPlan, new FuncSpec(RollupDimensions.class.getName()),
            lexpList);
      }

      for (LogicalExpressionPlan lexp : lexpPlanList) {
    Iterator<Operator> it = lexp.getOperators();
    while (it.hasNext()) {
        uexpPlan.add(it.next());
    }
      }
      // Add the UDF to logical expression plan that contains dependent
      // attributes (pushed down from input columns)
      allExprPlan.add(operIdx, uexpPlan);
  }

  // If the operator is a UserFuncExpression then set the flatten flags.
  List<Boolean> flattenFlags = new ArrayList<Boolean>();
  for (int idx = 0; idx < allExprPlan.size(); idx++) {
      List<Operator> opers = allExprPlan.get(idx).getSources();
      for (Operator oper : opers) {
    if (oper instanceof ProjectExpression) {
        flattenFlags.add(false);
    } else if (oper instanceof UserFuncExpression) {
        flattenFlags.add(true);
    }
      }
  }

  // Generate and Foreach operator creation
  String falias = null;
  try {
      buildGenerateOp(loc, (LOForEach) foreach, (LOGenerate) gen, allExprPlan,
        flattenFlags, getUserDefinedSchema(allExprPlan));
      falias = buildForeachOp(loc, (LOForEach) foreach, "cube", inputAlias, innerPlan);
  } catch (ParserValidationException pve) {
      throw new FrontendException(pve);
  }

  List<Boolean> innerFlags = new ArrayList<Boolean>();
  List<String> inpAliases = new ArrayList<String>();
  inpAliases.add(falias);
  innerFlags.add(false);

  // Get the output schema of foreach operator and reconstruct the
  // LogicalExpressionPlan for each dimensional attributes
  MultiMap<Integer, LogicalExpressionPlan> exprPlansCopy = new MultiMap<Integer, LogicalExpressionPlan>();

  for (LogicalExpressionPlan exp : expressionPlans.values()) {
      LogicalExpression lexp = (LogicalExpression) exp.getSources().get(0);
      LogicalExpressionPlan epGrp = new LogicalExpressionPlan();
      new ProjectExpression(epGrp, 0, lexp.getFieldSchema().alias, null, groupby);
      exprPlansCopy.put(0, epGrp);
  }

  // build group by operator
  try {
View Full Code Here

      LogicalRelationalOperator lro) throws FrontendException {

  List<LogicalExpression> leList = new ArrayList<LogicalExpression>();
  for (int i = 0; i < lexpPlanList.size(); i++) {
      LogicalExpressionPlan lexp = lexpPlanList.get(i);
      LogicalExpression lex = (LogicalExpression) lexp.getSources().get(0);
      Iterator<Operator> opers = lexp.getOperators();

      // ProjExpr are initially attached to CubeOp. So re-attach it to
      // specified operator
      while (opers.hasNext()) {
View Full Code Here

    private void checkDuplicateProject(List<LogicalExpressionPlan> lExprPlan)
      throws FrontendException {

  for (int i = 0; i < lExprPlan.size(); i++) {
      for (int j = i + 1; j < lExprPlan.size(); j++) {
    LogicalExpression outer = (LogicalExpression) lExprPlan.get(i).getSources().get(0);
    LogicalExpression inner = (LogicalExpression) lExprPlan.get(j).getSources().get(0);
    String outColAlias = ((ProjectExpression) outer).getColAlias();
    String inColAlias = ((ProjectExpression) inner).getColAlias();

    if (outColAlias == null) {
        outColAlias = outer.getFieldSchema().alias;
    }

    if (inColAlias == null) {
        inColAlias = inner.getFieldSchema().alias;
    }

    if (outColAlias.equals(inColAlias) == true) {
        lExprPlan.remove(j);
        throw new FrontendException("Duplicate dimensions detected. Dimension name: "
View Full Code Here

            flags[i] = flattenFlags.get( i );
        LogicalPlan innerPlan = (LogicalPlan)gen.getPlan();
        ArrayList<Operator> inputs = new ArrayList<Operator>();
        int idx = 0;
        for( LogicalExpressionPlan exprPlan : exprPlans ) {
            LogicalExpression expr = (LogicalExpression)exprPlan.getSources().get(0);
            LogicalSchema userSchema = schemas.get(idx);
            if (userSchema == null && expr.hasFieldSchema()) {
                LogicalSchema ls = new LogicalSchema();
                try {
                    ls.addField(expr.getFieldSchema());
                    schemas.set(idx, ls);
                } catch (FrontendException e) {
                    // if we get an exception, then we have no schema to set
                }
            }
View Full Code Here

TOP

Related Classes of org.apache.pig.newplan.logical.expression.LogicalExpression

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.