Reasoning on data partitioning for single-round multi-join evaluation in massively parallel systems