@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); } }
@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); } }