コード例 #1
0
    @Override
    public void visitLocalRearrange(POLocalRearrange lrearrange) throws VisitorException {
      POLocalRearrangeTez lr = (POLocalRearrangeTez) lrearrange;
      if (!(lr.isConnectedToPackage()
          && lr.getOutputKey().equals(pkgTezOp.getOperatorKey().toString()))) {
        return;
      }
      loRearrangeFound++;
      Map<Integer, Pair<Boolean, Map<Integer, Integer>>> keyInfo;

      if (pkg.getPkgr() instanceof LitePackager) {
        if (lrearrange.getIndex() != 0) {
          // Throw some exception here
          throw new RuntimeException(
              "POLocalRearrange for POPackageLite cannot have index other than 0, but has index - "
                  + lrearrange.getIndex());
        }
      }

      // annotate the package with information from the LORearrange
      // update the keyInfo information if already present in the POPackage
      keyInfo = pkg.getPkgr().getKeyInfo();
      if (keyInfo == null) keyInfo = new HashMap<Integer, Pair<Boolean, Map<Integer, Integer>>>();

      if (keyInfo.get(Integer.valueOf(lrearrange.getIndex())) != null) {
        // something is wrong - we should not be getting key info
        // for the same index from two different Local Rearranges
        int errCode = 2087;
        String msg =
            "Unexpected problem during optimization."
                + " Found index:"
                + lrearrange.getIndex()
                + " in multiple LocalRearrange operators.";
        throw new OptimizerException(msg, errCode, PigException.BUG);
      }
      keyInfo.put(
          Integer.valueOf(lrearrange.getIndex()),
          new Pair<Boolean, Map<Integer, Integer>>(
              lrearrange.isProjectStar(), lrearrange.getProjectedColsMap()));
      pkg.getPkgr().setKeyInfo(keyInfo);
      pkg.getPkgr().setKeyTuple(lrearrange.isKeyTuple());
      pkg.getPkgr().setKeyCompound(lrearrange.isKeyCompound());
    }