Yuming Wang created SPARK-60382:
-----------------------------------

             Summary: CoalesceBucketsInJoin uses a broadcast join's build-side 
bucket count
                 Key: SPARK-60382
                 URL: https://issues.apache.org/jira/browse/SPARK-60382
             Project: Spark
          Issue Type: Bug
          Components: SQL
    Affects Versions: 5.0.0
            Reporter: Yuming Wang


When spark.sql.bucketing.coalesceBucketsInJoin.enabled is true, a sort-merge 
join whose child is a BuildLeft broadcast hash join, broadcast nested-loop 
join, or broadcast range join can coalesce the streamed bucketed scan using the 
build side's bucket count.

ExtractJoinWithBuckets.getBucketSpec uses collectFirst, which walks the left 
child first. For BuildLeft the left child is the broadcast build side, so a 
bucketed scan there is reported as the join input's bucket count. 
updateNumCoalescedBucketsInScan then stamps every bucketed scan in that 
subtree, including the streamed scan whose partitioning the parent join 
actually uses.

Bucket files are grouped by the original bucket id modulo the coalesced count, 
while the scan advertises HashPartitioning of that count. If the streamed 
table's bucket count is not divisible by the build side's count, hash(key) % 
streamedBuckets and hash(key) % coalescedBuckets land in different partitions. 
The other side of the sort-merge join is a real table of the coalesced bucket 
count, EnsureRequirements inserts no shuffle, and an inner join drops matching 
rows. An outer join null-pads them.

The count that reaches the parent join is the streamed side's. The lookup 
should follow the same streamed-side walk as hasScanOperation (Filter, Project, 
then the streamed child of a broadcast hash, nested-loop, or range join), and 
only that scan should be rewritten.

The config defaults to false, so this does not affect plans unless bucket 
coalescing is enabled.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to