private void setInputStreams(StreamingConfig config) throws ExecutorException {
    String orderedStreams = combineOperator.getOrderedStreams();
    List<String> inputStreamNames = Lists.newArrayList();
    String[] strs = orderedStreams.split(",");
    for (int i = 0; i < strs.length; i++) {
      inputStreamNames.add(getPlanStreamNameFromTransition(strs[i]));
    }

    config.put(StreamingConfig.OPERATOR_COMBINE_INPUTNAMES, inputStreamNames);
  }
  private void setCombineConditions(StreamingConfig config) throws ExecutorException {
    Map<String, String> keyMap = Maps.newHashMap();
    List<ExpressionDescribe> exps =
        createCombineExpressions(combineOperator.getCombineProperties());

    for (ExpressionDescribe exp : exps) {
      PropertyValueExpressionDesc pexp = (PropertyValueExpressionDesc) exp;
      String streamName = pexp.getSchemaId();
      keyMap.put(getPlanStreamNameFromTransition(streamName), pexp.getProperty());
    }
    config.put(StreamingConfig.OPERATOR_COMBINE_INPUTNAMES_AND_KEY, keyMap);
  }
  private void setCombineOutputs(StreamingConfig config) throws ExecutorException {

    List<ExpressionDescribe> exps = createCombineExpressions(combineOperator.getOutputExpression());

    /*
     * 需要检查相同的流属性必须放在一起
     */
    List<String> combineStreams = Lists.newArrayList();
    List<List<PropertyValueExpression>> tmpOuts = Lists.newArrayList();

    for (int i = 0; i < exps.size(); i++) {
      if (!(exps.get(i) instanceof PropertyValueExpressionDesc)) {

        ExecutorException exception =
            new ExecutorException(ErrorCode.SEMANTICANALYZE_COMBINE_SIMPLE_EXPRESSION);
        LOG.error("Not property value expression in combie clause.", exception);

        throw exception;
      }
      PropertyValueExpressionDesc pexp = (PropertyValueExpressionDesc) exps.get(i);
      String streamName = pexp.getSchemaId();
      PropertyValueExpression expression =
          (PropertyValueExpression) new PropertyValueExpressionCreator().createInstance(pexp, null);

      if (combineStreams.size() == 0) {
        combineStreams.add(streamName);
        tmpOuts.add(new ArrayList<PropertyValueExpression>());
        tmpOuts.get(tmpOuts.size() - 1).add(expression);
      } else {
        if (combineStreams.get(combineStreams.size() - 1).equals(streamName)) {
          tmpOuts.get(tmpOuts.size() - 1).add(expression);
        } else {
          /*
           * 如果出现不一样的流名称,先检查该流名称是否已经出现过
           * 如果出现过,就报错,因为combine中的列必须是按照顺序进行的。
           */
          checkStreamNameRepeated(combineStreams, streamName);

          combineStreams.add(streamName);
          tmpOuts.add(new ArrayList<PropertyValueExpression>());
          tmpOuts.get(tmpOuts.size() - 1).add(expression);
        }
      }
    }
    // 查询顺序取决于这个参数
    config.put(
        StreamingConfig.OPERATOR_COMBINE_INPUTNAMES_AND_EXPRESSION,
        createOutputMaps(combineStreams, tmpOuts));
  }