use of io.dingodb.exec.operator.GetByKeysOperator in project dingo by dingodb.
the class DingoJobVisitor method visit.
@Override
public Collection<Output> visit(@Nonnull DingoGetByKeys rel) {
String tableName = getSimpleName(rel.getTable());
final Map<String, Location> partLocations = Services.META.getPartLocations(tableName);
final TableDefinition td = Services.META.getTableDefinition(tableName);
final PartitionStrategy ps = new SimpleHashStrategy(partLocations.size());
final TableId tableId = new TableId(Services.META.getTableKey(tableName));
Map<String, List<Object[]>> partMap = ps.partKeyTuples(rel.getKeyTuples());
List<Output> outputs = new LinkedList<>();
for (Map.Entry<String, List<Object[]>> entry : partMap.entrySet()) {
final Object partId = entry.getKey();
GetByKeysOperator operator = new GetByKeysOperator(tableId, partId, td.getTupleSchema(), td.getKeyMapping(), entry.getValue(), rel.getSelection());
operator.setId(idGenerator.get());
Task task = job.getOrCreate(partLocations.get(entry.getKey()));
task.putOperator(operator);
operator.getSoleOutput().setHint(OutputHint.of(tableName, partId));
outputs.addAll(operator.getOutputs());
}
return outputs;
}
Aggregations