private PTable<K, Pair<U,V>> joinInternal(PTable<K, U> left, PTable<K, V> right, boolean includeUnmatchedLeftValues) {
PTypeFamily tf = left.getTypeFamily();
ReadableData<Pair<K, V>> rightReadable = right.asReadable(materialize);
MapsideJoinDoFn<K, U, V> mapJoinDoFn = new MapsideJoinDoFn<K, U, V>(
rightReadable, right.getPTableType(), includeUnmatchedLeftValues);
ParallelDoOptions options = ParallelDoOptions.builder()
.sourceTargets(rightReadable.getSourceTargets())
.build();
return left.parallelDo("mapjoin", mapJoinDoFn,
tf.tableOf(left.getKeyType(), tf.pairs(left.getValueType(), right.getValueType())),
options);