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

The type of parameters that arbitrary_with accepts for configuration of the generated Strategy. Parameters must implement Default. Read more

The type of Strategy used to generate values of type Self. Read more

Generates a Strategy for producing arbitrary values of type the implementing type (Self). The strategy is passed the arguments given in args. Read more

Generates a Strategy for producing arbitrary values of type the implementing type (Self). Read more

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Deserialize this value from the given Serde deserializer. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Convert a Self into a Proto value.

Consume and convert a Proto back into a Self value. Read more

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Compare self to key and return true if they are equal.

Returns the argument unchanged.

Attaches the provided Context to this type, returning a WithContext wrapper. Read more

Attaches the current Context to this type, returning a WithContext wrapper. Read more

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Wrap the input message T in a tonic::Request

Upcasts this ProgressEventTimestamp to Any. Read more

Returns the name of the concrete type of this object. Read more

Should always be Self

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more