Пример #1
0
  @Override
  public void onPush(Row m) {
    List<Object> keys = EMPTY_KEY;
    if (clauseCount > 0) {
      keys = new ArrayList<Object>(clauseCount);

      for (String clause : clauses) {
        Object keyValue = m.get(clause);
        if (discardNullGroup && keyValue == null) return;

        keys.add(keyValue);
      }
    }

    try {
      inputCount++;

      AggregationFunction[] fs = buffer.get(keys);
      if (fs == null) {
        fs = new AggregationFunction[funcs.length];
        for (int i = 0; i < fs.length; i++) fs[i] = funcs[i].clone();

        buffer.put(keys, fs);
      }

      for (AggregationFunction f : fs) f.apply(m);

      // flush
      if (buffer.size() > 50000) flush();

    } catch (IOException e) {
      throw new IllegalStateException("stats failed, query " + query, e);
    }
  }
Пример #2
0
  @Override
  public void onPush(RowBatch rowBatch) {
    List<Object> keys = EMPTY_KEY;

    if (useClause) keys = new ArrayList<Object>(clauseCount);

    if (rowBatch.selectedInUse) {
      for (int index = 0; index < rowBatch.size; index++) {
        keys.clear();
        Row row = rowBatch.rows[rowBatch.selected[index]];
        if (useClause) {
          boolean isNullGroup = false;
          for (String clause : clauses) {
            Object keyValue = row.get(clause);
            if (discardNullGroup && keyValue == null) {
              isNullGroup = true;
              break;
            }

            keys.add(keyValue);
          }

          if (isNullGroup) continue;
        }

        inputCount++;

        AggregationFunction[] fs = buffer.get(keys);
        if (fs == null) {
          fs = new AggregationFunction[funcs.length];
          for (int i = 0; i < fs.length; i++) fs[i] = funcs[i].clone();

          buffer.put(new ArrayList<Object>(keys), fs);
        }

        for (AggregationFunction f : fs) f.apply(row);
      }
    } else {
      for (int i = 0; i < rowBatch.size; i++) {
        Row m = rowBatch.rows[i];
        if (useClause) {
          keys.clear();
          boolean isNullGroup = false;
          for (String clause : clauses) {
            Object keyValue = m.get(clause);
            if (discardNullGroup && keyValue == null) {
              isNullGroup = true;
              break;
            }

            keys.add(keyValue);
          }

          if (isNullGroup) continue;
        }

        inputCount++;

        AggregationFunction[] fs = buffer.get(keys);
        if (fs == null) {
          fs = new AggregationFunction[funcs.length];
          for (int j = 0; j < fs.length; j++) fs[j] = funcs[j].clone();

          buffer.put(new ArrayList<Object>(keys), fs);
        }

        for (AggregationFunction f : fs) f.apply(m);
      }
    }

    try {
      // flush
      if (buffer.size() > 50000) flush();
    } catch (IOException e) {
      throw new IllegalStateException("stats failed, query " + query, e);
    }
  }