Struct mz_dataflow_types::plan::top_k::MonotonicTop1Plan
source · [−]pub struct MonotonicTop1Plan {
pub group_key: Vec<usize>,
pub order_key: Vec<ColumnOrder>,
}
Expand description
A plan for monotonic TopKs with an offset of 0 and a limit of 1.
If the input to a TopK is monotonic (aka append-only aka no retractions) then we don’t have to worry about keeping every row we’ve seen around forever. Instead, the reduce can incrementally compute a new answer by looking at just the old TopK for a key and the incremental data.
This optimization generalizes to any TopK over a monotonic source, but we special case only TopK with offset=0 and limit=1 (aka Top1) for now. This is because (1) Top1 can merge in each incremental row in constant space and time while the generalized solution needs something like a priority queue and (2) we expect Top1 will be a common pattern used to turn a Kafka source’s “upsert” semantics into differential’s semantics. (2) is especially interesting because Kafka is monotonic with an ENVELOPE of NONE, which is the default for ENVELOPE in Materialize and commonly used by users.
Fields
group_key: Vec<usize>
The columns that form the key for each group.
order_key: Vec<ColumnOrder>
Ordering that is used within each group.
Trait Implementations
sourceimpl Arbitrary for MonotonicTop1Plan
impl Arbitrary for MonotonicTop1Plan
type Parameters = (<Vec<usize> as Arbitrary>::Parameters, <Vec<ColumnOrder> as Arbitrary>::Parameters)
type Parameters = (<Vec<usize> as Arbitrary>::Parameters, <Vec<ColumnOrder> as Arbitrary>::Parameters)
The type of parameters that arbitrary_with
accepts for configuration
of the generated Strategy
. Parameters must implement Default
. Read more
type Strategy = Map<(<Vec<usize> as Arbitrary>::Strategy, <Vec<ColumnOrder> as Arbitrary>::Strategy), fn(_: (Vec<usize>, Vec<ColumnOrder>)) -> Self>
type Strategy = Map<(<Vec<usize> as Arbitrary>::Strategy, <Vec<ColumnOrder> as Arbitrary>::Strategy), fn(_: (Vec<usize>, Vec<ColumnOrder>)) -> Self>
sourcefn arbitrary_with(_top: Self::Parameters) -> Self::Strategy
fn arbitrary_with(_top: Self::Parameters) -> Self::Strategy
sourceimpl Clone for MonotonicTop1Plan
impl Clone for MonotonicTop1Plan
sourcefn clone(&self) -> MonotonicTop1Plan
fn clone(&self) -> MonotonicTop1Plan
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Debug for MonotonicTop1Plan
impl Debug for MonotonicTop1Plan
sourceimpl<'de> Deserialize<'de> for MonotonicTop1Plan
impl<'de> Deserialize<'de> for MonotonicTop1Plan
sourcefn 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>,
Deserialize this value from the given Serde deserializer. Read more
sourceimpl PartialEq<MonotonicTop1Plan> for MonotonicTop1Plan
impl PartialEq<MonotonicTop1Plan> for MonotonicTop1Plan
sourcefn eq(&self, other: &MonotonicTop1Plan) -> bool
fn eq(&self, other: &MonotonicTop1Plan) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
sourcefn ne(&self, other: &MonotonicTop1Plan) -> bool
fn ne(&self, other: &MonotonicTop1Plan) -> bool
This method tests for !=
.
sourceimpl RustType<ProtoMonotonicTop1Plan> for MonotonicTop1Plan
impl RustType<ProtoMonotonicTop1Plan> for MonotonicTop1Plan
sourcefn into_proto(&self) -> ProtoMonotonicTop1Plan
fn into_proto(&self) -> ProtoMonotonicTop1Plan
Convert a Self
into a Proto
value.
sourcefn from_proto(proto: ProtoMonotonicTop1Plan) -> Result<Self, TryFromProtoError>
fn from_proto(proto: ProtoMonotonicTop1Plan) -> Result<Self, TryFromProtoError>
Consume and convert a Proto
back into a Self
value. Read more
sourceimpl Serialize for MonotonicTop1Plan
impl Serialize for MonotonicTop1Plan
impl Eq for MonotonicTop1Plan
impl StructuralEq for MonotonicTop1Plan
impl StructuralPartialEq for MonotonicTop1Plan
Auto Trait Implementations
impl RefUnwindSafe for MonotonicTop1Plan
impl Send for MonotonicTop1Plan
impl Sync for MonotonicTop1Plan
impl Unpin for MonotonicTop1Plan
impl UnwindSafe for MonotonicTop1Plan
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
sourcefn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to key
and return true
if they are equal.
sourceimpl<T> FutureExt for T
impl<T> FutureExt for T
sourcefn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
sourcefn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
sourcefn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message T
in a tonic::Request
sourceimpl<T> ProgressEventTimestamp for T where
T: Data + Debug + Any,
impl<T> ProgressEventTimestamp for T where
T: Data + Debug + Any,
sourceimpl<P, R> ProtoType<R> for P where
R: RustType<P>,
impl<P, R> ProtoType<R> for P where
R: RustType<P>,
sourcefn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
See RustType::from_proto
.
sourcefn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
See RustType::into_proto
.
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more