.fieldDelimiter('|')
.field(IntValue.class, 0)
.field(StringValue.class, 6);
// create JoinOperator for joining Orders and LineItems
JoinOperator joinCO = JoinOperator.builder(new JoinCO(), IntValue.class, 0, 0)
.name("JoinCO")
.build();
joinCO.setDegreeOfParallelism(numSubtasks);
// create ReduceOperator for aggregating the result
ReduceOperator aggCO = ReduceOperator.builder(new AggCO(), StringValue.class, 1)
.name("AggCo")
.build();
aggCO.setDegreeOfParallelism(numSubtasks);
// create DataSinkContract for writing the result
FileDataSink result = new FileDataSink(new CsvOutputFormat(), output, "Output");
result.setDegreeOfParallelism(numSubtasks);
CsvOutputFormat.configureRecordFormat(result)
.recordDelimiter('\n')
.fieldDelimiter('|')
.field(IntValue.class, 0)
.field(StringValue.class, 1);
// assemble the plan
result.setInput(aggCO);
aggCO.setInput(joinCO);
joinCO.setFirstInput(orders);
joinCO.setSecondInput(customers);
return new Plan(result, "TPCH Asterix");
}