in paimon-presto-common/src/main/java/org/apache/paimon/presto/PrestoSplitManager.java [46:82]
public ConnectorSplitSource getSplits(
ConnectorTransactionHandle transactionHandle,
ConnectorSession session,
ConnectorTableLayoutHandle layout,
SplitSchedulingContext splitSchedulingContext) {
PrestoTableHandle tableHandle = ((PrestoTableLayoutHandle) layout).getTableHandle();
Table table = tableHandle.table();
ReadBuilder readBuilder = table.newReadBuilder();
new PrestoFilterConverter(table.rowType())
.convert(tableHandle.getFilter())
.ifPresent(readBuilder::withFilter);
Optional<List<Map<String, String>>> partitions = tableHandle.getPartitions();
org.apache.paimon.types.RowType partitionType =
table.rowType().project(table.partitionKeys());
List<Predicate> predicates = new ArrayList<>();
String partitionDefaultName = new CoreOptions(table.options()).partitionDefaultName();
if (partitions.isPresent()) {
for (Map<String, String> row : partitions.get()) {
Map<String, Object> partition =
InternalRowPartitionComputer.convertSpecToInternal(
row, partitionType, partitionDefaultName);
predicates.add(
PartitionPredicate.createPartitionPredicate(table.rowType(), partition));
}
if (!predicates.isEmpty()) {
readBuilder.withFilter(PredicateBuilder.or(predicates));
} else {
// empty partition
return new PrestoSplitSource(new ArrayList<>());
}
}
List<Split> splits = readBuilder.newScan().plan().splits();
return new PrestoSplitSource(
splits.stream().map(PrestoSplit::fromSplit).collect(Collectors.toList()));
}