private void addParentReduceSink(final List<ExprNodeDesc> andArgs, final ReduceSinkOperator rsOp,
        final int keyIndex, final ExprNodeDesc sourceKey) throws SemanticException {
      ExprNodeDynamicListDesc dynamicExpr =
          new ExprNodeDynamicListDesc(rsOp.getConf().getKeyCols().get(keyIndex).getTypeInfo(), rsOp, keyIndex);
      // Create synthetic IN expression
      List<ExprNodeDesc> inArgs = new ArrayList<>();
      inArgs.add(sourceKey);
      inArgs.add(dynamicExpr);
      ExprNodeDesc newNode = ExprNodeGenericFuncDesc.newInstance(
          FunctionRegistry.getFunctionInfo("in").getGenericUDF(), inArgs);
      andArgs.add(newNode);
    }
creates synthetic predicates that represent "IN (keylist other table)"
ql/src/java/org/apache/hadoop/hive/ql/ppd/SyntheticJoinPredicate.java