Struct datafusion::physical_plan::joins::NestedLoopJoinExec
source · pub struct NestedLoopJoinExec { /* private fields */ }
Expand description
NestedLoopJoinExec executes partitions in parallel. One input will be collected to a single partition, call it inner-table. The other side of the input is treated as outer-table, and the output Partitioning is from it. Giving an output partition number x, the execution will be:
for outer-table-batch in outer-table-partition-x
check-join(outer-table-batch, inner-table-data)
One of the inputs will become inner table, and it is decided by the join type. Following is the relation table:
JoinType | Distribution (left, right) | Inner-table |
---|---|---|
Inner/Left/LeftSemi/LeftAnti | (UnspecifiedDistribution, SinglePartition) | right |
Right/RightSemi/RightAnti/Full | (SinglePartition, UnspecifiedDistribution) | left |
Full | (SinglePartition, SinglePartition) | left |
Implementations§
source§impl NestedLoopJoinExec
impl NestedLoopJoinExec
sourcepub fn try_new(
left: Arc<dyn ExecutionPlan>,
right: Arc<dyn ExecutionPlan>,
filter: Option<JoinFilter>,
join_type: &JoinType
) -> Result<Self>
pub fn try_new( left: Arc<dyn ExecutionPlan>, right: Arc<dyn ExecutionPlan>, filter: Option<JoinFilter>, join_type: &JoinType ) -> Result<Self>
Try to create a nwe NestedLoopJoinExec
sourcepub fn left(&self) -> &Arc<dyn ExecutionPlan>
pub fn left(&self) -> &Arc<dyn ExecutionPlan>
left side
sourcepub fn right(&self) -> &Arc<dyn ExecutionPlan>
pub fn right(&self) -> &Arc<dyn ExecutionPlan>
right side
sourcepub fn filter(&self) -> Option<&JoinFilter>
pub fn filter(&self) -> Option<&JoinFilter>
Filters applied before join output
Trait Implementations§
source§impl Debug for NestedLoopJoinExec
impl Debug for NestedLoopJoinExec
source§impl DisplayAs for NestedLoopJoinExec
impl DisplayAs for NestedLoopJoinExec
source§impl ExecutionPlan for NestedLoopJoinExec
impl ExecutionPlan for NestedLoopJoinExec
source§fn as_any(&self) -> &dyn Any
fn as_any(&self) -> &dyn Any
Returns the execution plan as
Any
so that it can be
downcast to a specific implementation.source§fn output_partitioning(&self) -> Partitioning
fn output_partitioning(&self) -> Partitioning
Specifies the output partitioning scheme of this plan
source§fn output_ordering(&self) -> Option<&[PhysicalSortExpr]>
fn output_ordering(&self) -> Option<&[PhysicalSortExpr]>
If the output of this operator within each partition is sorted,
returns
Some(keys)
with the description of how it was sorted. Read moresource§fn required_input_distribution(&self) -> Vec<Distribution>
fn required_input_distribution(&self) -> Vec<Distribution>
Specifies the data distribution requirements for all the
children for this operator, By default it’s [Distribution::UnspecifiedDistribution] for each child,
source§fn equivalence_properties(&self) -> EquivalenceProperties
fn equivalence_properties(&self) -> EquivalenceProperties
Get the EquivalenceProperties within the plan
source§fn children(&self) -> Vec<Arc<dyn ExecutionPlan>>
fn children(&self) -> Vec<Arc<dyn ExecutionPlan>>
Get a list of child execution plans that provide the input for this plan. The returned list
will be empty for leaf nodes, will contain a single value for unary nodes, or two
values for binary nodes (such as joins).
source§fn with_new_children(
self: Arc<Self>,
children: Vec<Arc<dyn ExecutionPlan>>
) -> Result<Arc<dyn ExecutionPlan>>
fn with_new_children( self: Arc<Self>, children: Vec<Arc<dyn ExecutionPlan>> ) -> Result<Arc<dyn ExecutionPlan>>
Returns a new plan where all children were replaced by new plans.
source§fn execute(
&self,
partition: usize,
context: Arc<TaskContext>
) -> Result<SendableRecordBatchStream>
fn execute( &self, partition: usize, context: Arc<TaskContext> ) -> Result<SendableRecordBatchStream>
creates an iterator
source§fn metrics(&self) -> Option<MetricsSet>
fn metrics(&self) -> Option<MetricsSet>
source§fn statistics(&self) -> Statistics
fn statistics(&self) -> Statistics
Returns the global output statistics for this
ExecutionPlan
node.source§fn unbounded_output(&self, _children: &[bool]) -> Result<bool>
fn unbounded_output(&self, _children: &[bool]) -> Result<bool>
Specifies whether this plan generates an infinite stream of records.
If the plan does not support pipelining, but its input(s) are
infinite, returns an error to indicate this.
source§fn required_input_ordering(&self) -> Vec<Option<Vec<PhysicalSortRequirement>>>
fn required_input_ordering(&self) -> Vec<Option<Vec<PhysicalSortRequirement>>>
Specifies the ordering requirements for all of the children
For each child, it’s the local ordering requirement within
each partition rather than the global ordering Read more
source§fn maintains_input_order(&self) -> Vec<bool>
fn maintains_input_order(&self) -> Vec<bool>
Returns
false
if this operator’s implementation may reorder
rows within or between partitions. Read moresource§fn benefits_from_input_partitioning(&self) -> Vec<bool>
fn benefits_from_input_partitioning(&self) -> Vec<bool>
Specifies whether the operator benefits from increased parallelization
at its input for each child. If set to
true
, this indicates that the
operator would benefit from partitioning its corresponding child
(and thus from more parallelism). For operators that do very little work
the overhead of extra parallelism may outweigh any benefits Read moresource§fn ordering_equivalence_properties(&self) -> OrderingEquivalenceProperties
fn ordering_equivalence_properties(&self) -> OrderingEquivalenceProperties
Get the OrderingEquivalenceProperties within the plan
source§fn file_scan_config(&self) -> Option<&FileScanConfig>
fn file_scan_config(&self) -> Option<&FileScanConfig>
Returns the
FileScanConfig
in case this is a data source scanning execution plan or None
otherwise.Auto Trait Implementations§
impl !RefUnwindSafe for NestedLoopJoinExec
impl Send for NestedLoopJoinExec
impl Sync for NestedLoopJoinExec
impl Unpin for NestedLoopJoinExec
impl !UnwindSafe for NestedLoopJoinExec
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more