Peter Toth created SPARK-60541:
----------------------------------

             Summary: Per-partition runtime bloom filters for 
storage-partitioned joins
                 Key: SPARK-60541
                 URL: https://issues.apache.org/jira/browse/SPARK-60541
             Project: Spark
          Issue Type: Improvement
          Components: SQL
    Affects Versions: 5.0.0
            Reporter: Peter Toth


Runtime bloom filters ({{InjectRuntimeFilter}}) build one bloom for the whole 
filter creation side, through a scalar subquery. In a storage-partitioned join 
both sides are already split by the partition key, so each partition only needs 
the keys of the matching partition on the other side.

This adds a per-partition variant. When both scans report a compatible 
{{KeyedPartitioning}}, the optimizer adds a left semi join of the application 
side and an aggregate grouped by the creation side's partition transform, which 
builds one bloom per partition key. The semi join plans as part of the 
storage-partitioned join, without a shuffle.

Compared with the global bloom:
* each bloom holds only its partition's keys, so at the same size it has a 
lower false positive rate;
* a creation side too large for one global bloom can still be filtered;
* there is no driver round trip and no stage boundary for the subquery.

A follow-up can hand the per-partition bloom to the application side's scan as 
a storage filter (SPARK-60465).




--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

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

Reply via email to