in src/main/java/org/apache/paimon/trino/TrinoSplitManager.java [63:93]
protected ConnectorSplitSource getSplits(
ConnectorTableHandle connectorTableHandle, ConnectorSession session) {
// TODO dynamicFilter?
// TODO what is constraint?
TrinoTableHandle tableHandle = (TrinoTableHandle) connectorTableHandle;
Table table = tableHandle.tableWithDynamicOptions(trinoCatalog, session);
ReadBuilder readBuilder = table.newReadBuilder();
new TrinoFilterConverter(table.rowType())
.convert(tableHandle.getFilter())
.ifPresent(readBuilder::withFilter);
tableHandle.getLimit().ifPresent(limit -> readBuilder.withLimit((int) limit));
List<Split> splits = readBuilder.dropStats().newScan().plan().splits();
long maxRowCount = splits.stream().mapToLong(Split::rowCount).max().orElse(0L);
double minimumSplitWeight = TrinoSessionProperties.getMinimumSplitWeight(session);
return new TrinoSplitSource(
splits.stream()
.map(
split ->
TrinoSplit.fromSplit(
split,
Math.min(
Math.max(
(double) split.rowCount()
/ maxRowCount,
minimumSplitWeight),
1.0)))
.collect(Collectors.toList()),
((TrinoTableHandle) connectorTableHandle).getLimit());
}