use of io.dingodb.exec.base.Operator in project dingo by dingodb.
the class TaskImpl method run.
public void run() {
log.info("Task is starting at {}...", location);
runList.forEach(id -> {
final Operator operator = operators.get(id);
assert operator instanceof SourceOperator : "Operators in run list must be source operator.";
executorService.execute(() -> {
try {
while (operator.push(0, null)) {
log.info("Operator {} need another pushing.", operator.getId());
}
operator.fin(0, null);
} catch (RuntimeException e) {
e.printStackTrace();
log.error("Operator:{} run catch Exception:{}", operator.getId(), e.toString(), e);
}
});
});
}
use of io.dingodb.exec.base.Operator in project dingo by dingodb.
the class DingoJobVisitor method visit.
@Override
public Collection<Output> visit(@Nonnull DingoCoalesce rel) {
Collection<Output> inputs = dingo(rel.getInput()).accept(this);
int size = inputs.size();
if (size <= 1) {
return inputs;
}
Output one = inputs.iterator().next();
boolean isToSumUp = one.isToSumUp();
Operator operator = isToSumUp ? new SumUpOperator(size) : new CoalesceOperator(size);
operator.setId(idGenerator.get());
Task task = one.getTask();
task.putOperator(operator);
int i = 0;
for (Output input : inputs) {
assert input.getTask().equals(task) : "Operator linked must be in the same task.";
assert input.isToSumUp() == isToSumUp : "All inputs must have the same \"toSumUp\" hint.";
input.setLink(operator.getInput(i));
++i;
}
return operator.getOutputs();
}
use of io.dingodb.exec.base.Operator in project dingo by dingodb.
the class DingoJobVisitor method visit.
@Override
public Collection<Output> visit(@Nonnull DingoReduce rel) {
Collection<Output> inputs = dingo(rel.getInput()).accept(this);
int size = inputs.size();
if (size <= 1) {
return inputs;
}
Operator operator;
operator = new ReduceOperator(inputs.size(), rel.getKeyMapping(), rel.getAggList());
operator.setId(idGenerator.get());
Output one = inputs.iterator().next();
Task task = one.getTask();
task.putOperator(operator);
int i = 0;
for (Output input : inputs) {
assert input.getTask().equals(task) : "Operator linked must be in the same task.";
input.setLink(operator.getInput(i));
++i;
}
return operator.getOutputs();
}
use of io.dingodb.exec.base.Operator in project dingo by dingodb.
the class DingoJobVisitor method visit.
@Override
public Collection<Output> visit(@Nonnull DingoPartModify rel) {
Collection<Output> inputs = dingo(rel.getInput()).accept(this);
String tableName = getSimpleName(rel.getTable());
List<Output> outputs = new LinkedList<>();
TableDefinition td = Services.META.getTableDefinition(tableName);
final TableId tableId = new TableId(Services.META.getTableKey(tableName));
for (Output input : inputs) {
Task task = input.getTask();
Operator operator;
switch(rel.getOperation()) {
case INSERT:
operator = new PartInsertOperator(tableId, input.getHint().getPartId(), td.getTupleSchema(), td.getKeyMapping());
break;
case UPDATE:
operator = new PartUpdateOperator(tableId, input.getHint().getPartId(), td.getTupleSchema(), td.getKeyMapping(), TupleMapping.of(td.getColumnIndices(rel.getUpdateColumnList())), rel.getSourceExpressionList().stream().map(RexConverter::toString).collect(Collectors.toList()));
break;
case DELETE:
operator = new PartDeleteOperator(tableId, input.getHint().getPartId(), td.getTupleSchema(), td.getKeyMapping());
break;
default:
throw new IllegalStateException("Operation \"" + rel.getOperation() + "\" is not supported.");
}
operator.setId(idGenerator.get());
task.putOperator(operator);
input.setLink(operator.getInput(0));
OutputHint hint = new OutputHint();
hint.setToSumUp(true);
operator.getSoleOutput().setHint(hint);
outputs.addAll(operator.getOutputs());
}
return outputs;
}
use of io.dingodb.exec.base.Operator in project dingo by dingodb.
the class DingoJobVisitor method visit.
@Override
public Collection<Output> visit(@Nonnull DingoSort rel) {
Collection<Output> inputs = dingo(rel.getInput()).accept(this);
List<Output> outputs = new LinkedList<>();
for (Output input : inputs) {
Operator operator = new SortOperator(rel.getCollation().getFieldCollations().stream().map(c -> new SortCollation(c.getFieldIndex(), c.direction, c.nullDirection)).collect(Collectors.toList()), rel.fetch == null ? -1 : RexLiteral.intValue(rel.fetch), rel.offset == null ? 0 : RexLiteral.intValue(rel.offset));
Task task = input.getTask();
operator.setId(idGenerator.get());
task.putOperator(operator);
input.setLink(operator.getInput(0));
operator.getSoleOutput().copyHint(input);
outputs.addAll(operator.getOutputs());
}
return outputs;
}
Aggregations