pub struct MergeJoinRel {
pub common: Option<RelCommon>,
pub left: Option<Box<Rel>>,
pub right: Option<Box<Rel>>,
pub left_keys: Vec<FieldReference>,
pub right_keys: Vec<FieldReference>,
pub keys: Vec<ComparisonJoinKey>,
pub post_join_filter: Option<Box<Expression>>,
pub type: i32,
pub residual_expression: Option<Box<Expression>>,
pub advanced_extension: Option<AdvancedExtension>,
}Expand description
The merge join does a join by taking advantage of two sets that are sorted on the join keys. This allows the join operation to be done in a streaming fashion.
Fields§
§common: Option<RelCommon>§left: Option<Box<Rel>>§right: Option<Box<Rel>>§left_keys: Vec<FieldReference>These fields are deprecated in favor of keys. If they are set then
the two lists (left_keys and right_keys) must have the same length and
the comparion function is considered to be SimpleEqualityType::EQ
right_keys: Vec<FieldReference>keys: Vec<ComparisonJoinKey>One or more keys to join on. The relation is invalid if this is empty (unless the deprecated left_keys/right_keys fields are being used).
If a custom comparison function is used then it must be consistent with the ordering of the input data. For example, if the comparison function is “<” then we generally expect the data to be sorted in ascending order.
If the comparison function is something like “less than ignoring case” then the data should be sorted appropriately (e.g. both “A” and “a” should come before “b”)
The sort order is not specified here. It is typically the responsibility of the producer to ensure the plan sorts the data if needed (although the consumer is free to do so as well). If possible, the consumer should verify the sort order and reject invalid plans.
post_join_filter: Option<Box<Expression>>An optional boolean filter applied to each output record after join-type-specific output formation is complete. Semantically equivalent to placing a FilterRel directly above this join.
type: i32§residual_expression: Option<Box<Expression>>An optional boolean expression evaluated on each candidate key-match to
determine whether it is a true match. A candidate is only considered a
match when all keys comparisons AND this expression evaluate to true.
This expression interacts with join-type semantics: for example, in a
left outer join, a left row that has key matches but no candidate
satisfying this expression will be emitted with nulls for the right side.
advanced_extension: Option<AdvancedExtension>Implementations§
Trait Implementations§
Source§impl Clone for MergeJoinRel
impl Clone for MergeJoinRel
Source§fn clone(&self) -> MergeJoinRel
fn clone(&self) -> MergeJoinRel
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MergeJoinRel
impl Debug for MergeJoinRel
Source§impl Default for MergeJoinRel
impl Default for MergeJoinRel
Source§impl Message for MergeJoinRel
impl Message for MergeJoinRel
Source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
Source§fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self. Read moreSource§fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self.Source§impl Name for MergeJoinRel
impl Name for MergeJoinRel
Source§const NAME: &'static str = "MergeJoinRel"
const NAME: &'static str = "MergeJoinRel"
Message.
This name is the same as it appears in the source .proto file, e.g. FooBar.Source§const PACKAGE: &'static str = "substrait"
const PACKAGE: &'static str = "substrait"
., e.g. google.protobuf.Source§fn full_name() -> String
fn full_name() -> String
Message.
It’s prefixed with the package name and names of any parent messages,
e.g. google.rpc.BadRequest.FieldViolation.
By default, this is the package name followed by the message name.
Fully-qualified names must be unique within a domain of Type URLs.