pub enum FragmentOperator {
TabletScan {
table: String,
predicate: Option<String>,
projection: Vec<String>,
},
RemoteExchangeSource {
exchange: ExchangeId,
},
RemoteExchangeSink {
exchange: ExchangeId,
},
PartialAggregate {
group_by: Vec<String>,
aggregates: Vec<AggregateExpr>,
},
FinalAggregate {
group_by: Vec<String>,
aggregates: Vec<AggregateExpr>,
},
DistributedHashJoin {
on: Vec<JoinKey>,
},
BroadcastJoin {
on: Vec<JoinKey>,
build_side: BuildSide,
},
RepartitionJoin {
on: Vec<JoinKey>,
},
MergeSort {
keys: Vec<SortKey>,
limit: Option<usize>,
},
DistributedTopK {
k: usize,
score: SortKey,
},
DistributedLimit {
limit: usize,
},
}Expand description
One physical operator inside a fragment (spec section 12.10).
Variants§
TabletScan
Scan one tablet’s slice of a table.
Fields
RemoteExchangeSource
Receive one exchange edge from a producer fragment.
Fields
exchange: ExchangeIdThe exchange edge this source consumes.
RemoteExchangeSink
Emit this fragment’s output onto one exchange edge.
Fields
exchange: ExchangeIdThe exchange edge this sink feeds.
PartialAggregate
Per-tablet partial aggregation (pre-shuffle combine).
FinalAggregate
Coordinator-side combine of partial aggregates.
DistributedHashJoin
Hash join over colocated inputs (no exchange needed).
BroadcastJoin
Join where the small build side is broadcast to every big-side fragment.
RepartitionJoin
Join after both sides are hash-repartitioned on the join keys.
MergeSort
Producer side: local bounded sort. Coordinator side: deterministic k-way merge of sorted streams.
Fields
DistributedTopK
Producer side: bounded local top-k plus tie information. Coordinator
side: deterministic merge (score desc, tablet asc, RowId asc) with
adaptive refill (spec section 12.10).
DistributedLimit
Row limit (per-fragment locally; global at the coordinator).
Trait Implementations§
Source§impl Clone for FragmentOperator
impl Clone for FragmentOperator
Source§fn clone(&self) -> FragmentOperator
fn clone(&self) -> FragmentOperator
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 FragmentOperator
impl Debug for FragmentOperator
Source§impl<'de> Deserialize<'de> for FragmentOperator
impl<'de> Deserialize<'de> for FragmentOperator
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for FragmentOperator
impl PartialEq for FragmentOperator
Source§impl Serialize for FragmentOperator
impl Serialize for FragmentOperator
impl StructuralPartialEq for FragmentOperator
Auto Trait Implementations§
impl Freeze for FragmentOperator
impl RefUnwindSafe for FragmentOperator
impl Send for FragmentOperator
impl Sync for FragmentOperator
impl Unpin for FragmentOperator
impl UnsafeUnpin for FragmentOperator
impl UnwindSafe for FragmentOperator
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more