I have been looking around for a few days trying to find a clear and concise description of how, at a technical/implementation level, how distributed joins work, but haven't found much. The best so far is in Track Join: Distributed Joins with Minimal Network Traffic. In this though they seem to suggest that every joined attribute is sent over the network to every other node, sort of like this (from another presentation):
Is that really how distributed joins generally work? Say I have 100 billion records per "table" (type), and two tables/types, and want to join on them to find some resulting set of records (along with a filtering condition). "Find all employees where e.department_id = department.id and department.category is 'design'" sort of thing. If there are billions of both types of records, scattered randomly (through hash-based partitioning) across 100 servers/nodes, how would the join typically work? Would you literally have to send all billions of nodes to every node in the network? That just seems like an enormous waste. What am I not interpreting correctly? Is there no other way to do it?