package org.voltdb.benchmark.tpcc.procedures; import java.util.Iterator; import org.voltdb.ProcInfo; import org.voltdb.SQLStmt; import org.voltdb.VoltMapReduceProcedure; import org.voltdb.VoltTable; import org.voltdb.VoltTableRow; import org.voltdb.VoltType; import edu.brown.utils.CollectionUtil; @ProcInfo( mapInputQuery = "mapInputQuery" ) public class MRquery12 extends VoltMapReduceProcedure<Long> { public SQLStmt mapInputQuery = new SQLStmt( // "SELECT ol_number, SUM(ol_quantity), SUM(ol_amount), COUNT(*) " + // "FROM order_line " + // "WHERE ol_delivery_d > '2007-01-02 00:00:00.000000' " + // "GROUP BY ol_number " + // "ORDER BY ol_number" "SELECT o_ol_cnt, o_carrier_id " + "FROM ORDERS, ORDER_LINE " + "WHERE ol_w_id = o_w_id " + " and ol_d_id = o_d_id " + " and ol_o_id = o_id " + " and o_entry_d <= ol_delivery_d " + " and ol_delivery_d < '2020-01-01 00:00:00.000000' " + //"GROUP BY o_ol_cnt " + "ORDER BY o_ol_cnt" ); @Override public VoltTable.ColumnInfo[] getMapOutputSchema() { return new VoltTable.ColumnInfo[]{ new VoltTable.ColumnInfo("ol_number", VoltType.BIGINT), new VoltTable.ColumnInfo("high_line_count", VoltType.BIGINT), new VoltTable.ColumnInfo("low_line_count", VoltType.BIGINT), }; } @Override public VoltTable.ColumnInfo[] getReduceOutputSchema() { return new VoltTable.ColumnInfo[]{ new VoltTable.ColumnInfo("ol_number", VoltType.BIGINT), new VoltTable.ColumnInfo("revenue", VoltType.BIGINT), }; } @Override public void map(VoltTableRow row) { long key = row.getLong(0); long line = row.getLong(1); long high_line_ct = 0; long low_line_ct = 0; if (line == 1 || line == 2) high_line_ct = 1; if (line != 1 && line != 2) low_line_ct = 1; Object new_row[] = { key, high_line_ct, low_line_ct }; this.mapEmit(key, new_row); } @Override public void reduce(Long key, Iterator<VoltTableRow> rows) { long sum_high = 0; long sum_low = 0; for (VoltTableRow r : CollectionUtil.iterable(rows)) { assert(r != null); sum_high += rows.next().getLong(1); sum_low += rows.next().getLong(2); } // FOR Object new_row[] = { key, sum_high, sum_low }; this.reduceEmit(new_row); } }