Struct mz_compute::render::context::CollectionBundle
source · pub struct CollectionBundle<S: Scope, T = Timestamp>{
pub collection: Option<(Collection<S, Row, Diff>, Collection<S, DataflowError, Diff>)>,
pub arranged: BTreeMap<Vec<MirScalarExpr>, ArrangementFlavor<S, T>>,
}
Expand description
A bundle of the various ways a collection can be represented.
This type maintains the invariant that it does contain at least one valid source of data, either a collection or at least one arrangement.
Fields§
§collection: Option<(Collection<S, Row, Diff>, Collection<S, DataflowError, Diff>)>
§arranged: BTreeMap<Vec<MirScalarExpr>, ArrangementFlavor<S, T>>
Implementations§
source§impl<S: Scope, T> CollectionBundle<S, T>
impl<S: Scope, T> CollectionBundle<S, T>
sourcepub fn from_collections(
oks: Collection<S, Row, Diff>,
errs: Collection<S, DataflowError, Diff>,
) -> Self
pub fn from_collections( oks: Collection<S, Row, Diff>, errs: Collection<S, DataflowError, Diff>, ) -> Self
Construct a new collection bundle from update streams.
sourcepub fn from_expressions(
exprs: Vec<MirScalarExpr>,
arrangements: ArrangementFlavor<S, T>,
) -> Self
pub fn from_expressions( exprs: Vec<MirScalarExpr>, arrangements: ArrangementFlavor<S, T>, ) -> Self
Inserts arrangements by the expressions on which they are keyed.
sourcepub fn from_columns<I: IntoIterator<Item = usize>>(
columns: I,
arrangements: ArrangementFlavor<S, T>,
) -> Self
pub fn from_columns<I: IntoIterator<Item = usize>>( columns: I, arrangements: ArrangementFlavor<S, T>, ) -> Self
Inserts arrangements by the columns on which they are keyed.
sourcepub fn enter_region<'a>(
&self,
region: &Child<'a, S, S::Timestamp>,
) -> CollectionBundle<Child<'a, S, S::Timestamp>, T>
pub fn enter_region<'a>( &self, region: &Child<'a, S, S::Timestamp>, ) -> CollectionBundle<Child<'a, S, S::Timestamp>, T>
Brings the collection bundle into a region.
source§impl<'a, S: Scope, T> CollectionBundle<Child<'a, S, S::Timestamp>, T>
impl<'a, S: Scope, T> CollectionBundle<Child<'a, S, S::Timestamp>, T>
sourcepub fn leave_region(&self) -> CollectionBundle<S, T>
pub fn leave_region(&self) -> CollectionBundle<S, T>
Extracts the collection bundle from a region.
source§impl<S: Scope, T> CollectionBundle<S, T>
impl<S: Scope, T> CollectionBundle<S, T>
sourcepub fn as_specific_collection(
&self,
key: Option<&[MirScalarExpr]>,
) -> (Collection<S, Row, Diff>, Collection<S, DataflowError, Diff>)
pub fn as_specific_collection( &self, key: Option<&[MirScalarExpr]>, ) -> (Collection<S, Row, Diff>, Collection<S, DataflowError, Diff>)
Asserts that the arrangement for a specific key (or the raw collection for no key) exists, and returns the corresponding collection.
This returns the collection as-is, without doing any unthinning transformation. Therefore, it should be used when the appropriate transformation was planned as part of a following MFP.
sourcepub fn flat_map<D, I, C, L>(
&self,
key_val: Option<(Vec<MirScalarExpr>, Option<Row>)>,
constructor: C,
) -> (Stream<S, I::Item>, Collection<S, DataflowError, Diff>)where
I: IntoIterator<Item = (D, S::Timestamp, Diff)>,
D: Data,
C: FnOnce() -> L,
L: for<'a, 'b> FnMut(&'a mut DatumVecBorrow<'b>, &'a S::Timestamp, &'a Diff) -> I + 'static,
pub fn flat_map<D, I, C, L>(
&self,
key_val: Option<(Vec<MirScalarExpr>, Option<Row>)>,
constructor: C,
) -> (Stream<S, I::Item>, Collection<S, DataflowError, Diff>)where
I: IntoIterator<Item = (D, S::Timestamp, Diff)>,
D: Data,
C: FnOnce() -> L,
L: for<'a, 'b> FnMut(&'a mut DatumVecBorrow<'b>, &'a S::Timestamp, &'a Diff) -> I + 'static,
Constructs and applies logic to elements of a collection and returns the results.
constructor
takes a permutation and produces the logic to apply on elements. The logic
conceptually receives (&Row, &Row)
pairs in the form of a slice. Only after borrowing
the elements and applying the permutation the datums will be in the expected order.
If key_val
is set, this is a promise that logic
will produce no results on
records for which the key does not evaluate to the value. This is used when we
have an arrangement by that key to leap directly to exactly those records.
It is important that logic
still guard against data that does not satisfy
this constraint, as this method does not statically know that it will have
that arrangement.
sourcefn flat_map_core<Tr, K, D, I, L>(
trace: &Arranged<S, Tr>,
key: Option<K>,
logic: L,
refuel: usize,
) -> Stream<S, I::Item>where
for<'a> Tr::Key<'a>: ToDatumIter + IntoOwned<'a, Owned = K>,
for<'a> Tr::Val<'a>: ToDatumIter,
Tr: TraceReader<Time = S::Timestamp, Diff = Diff> + Clone + 'static,
K: PartialEq + 'static,
I: IntoIterator<Item = (D, Tr::Time, Tr::Diff)>,
D: Data,
L: for<'a, 'b> FnMut(Tr::Key<'_>, Tr::Val<'_>, &'a S::Timestamp, &'a Diff) -> I + 'static,
fn flat_map_core<Tr, K, D, I, L>(
trace: &Arranged<S, Tr>,
key: Option<K>,
logic: L,
refuel: usize,
) -> Stream<S, I::Item>where
for<'a> Tr::Key<'a>: ToDatumIter + IntoOwned<'a, Owned = K>,
for<'a> Tr::Val<'a>: ToDatumIter,
Tr: TraceReader<Time = S::Timestamp, Diff = Diff> + Clone + 'static,
K: PartialEq + 'static,
I: IntoIterator<Item = (D, Tr::Time, Tr::Diff)>,
D: Data,
L: for<'a, 'b> FnMut(Tr::Key<'_>, Tr::Val<'_>, &'a S::Timestamp, &'a Diff) -> I + 'static,
Factored out common logic for using literal keys in general traces.
This logic is sufficiently interesting that we want to write it only once, and thereby avoid any skew in the two uses of the logic.
The function presents the contents of the trace as (key, value, time, delta)
tuples,
where key and value are potentially specialized, but convertible into rows.
sourcepub fn arrangement(
&self,
key: &[MirScalarExpr],
) -> Option<ArrangementFlavor<S, T>>
pub fn arrangement( &self, key: &[MirScalarExpr], ) -> Option<ArrangementFlavor<S, T>>
Look up an arrangement by the expressions that form the key.
The result may be None
if no such arrangement exists, or it may be one of many
“arrangement flavors” that represent the types of arranged data we might have.
source§impl<S, T> CollectionBundle<S, T>where
T: Timestamp + Lattice + Columnation,
S: Scope,
S::Timestamp: Refines<T> + Lattice + Timestamp + RenderTimestamp,
impl<S, T> CollectionBundle<S, T>where
T: Timestamp + Lattice + Columnation,
S: Scope,
S::Timestamp: Refines<T> + Lattice + Timestamp + RenderTimestamp,
sourcepub fn as_collection_core(
&self,
mfp: MapFilterProject,
key_val: Option<(Vec<MirScalarExpr>, Option<Row>)>,
until: Antichain<Timestamp>,
) -> (Collection<S, Row, Diff>, Collection<S, DataflowError, Diff>)
pub fn as_collection_core( &self, mfp: MapFilterProject, key_val: Option<(Vec<MirScalarExpr>, Option<Row>)>, until: Antichain<Timestamp>, ) -> (Collection<S, Row, Diff>, Collection<S, DataflowError, Diff>)
Presents self
as a stream of updates, having been subjected to mfp
.
This operator is able to apply the logic of mfp
early, which can substantially
reduce the amount of data produced when mfp
is non-trivial.
The key_val
argument, when present, indicates that a specific arrangement should
be used, and if, in addition, the val
component is present,
that we can seek to the supplied row.
pub fn ensure_collections( self, collections: AvailableCollections, input_key: Option<Vec<MirScalarExpr>>, input_mfp: MapFilterProject, until: Antichain<Timestamp>, ) -> Self
sourcefn specialized_arrange(
name: &String,
oks: Collection<S, Row, i64>,
key: &Vec<MirScalarExpr>,
thinning: &Vec<usize>,
) -> (MzArrangement<S>, Collection<S, DataflowError, i64>)
fn specialized_arrange( name: &String, oks: Collection<S, Row, i64>, key: &Vec<MirScalarExpr>, thinning: &Vec<usize>, ) -> (MzArrangement<S>, Collection<S, DataflowError, i64>)
Builds a specialized arrangement to provided types. The specialization for key and value types of the arrangement is based on the bit length derived from the corresponding type descriptions.
Trait Implementations§
source§impl<S: Clone + Scope, T> Clone for CollectionBundle<S, T>where
T: Timestamp + Lattice + Columnation + Clone,
S::Timestamp: Lattice + Refines<T> + Columnation,
impl<S: Clone + Scope, T> Clone for CollectionBundle<S, T>where
T: Timestamp + Lattice + Columnation + Clone,
S::Timestamp: Lattice + Refines<T> + Columnation,
source§fn clone(&self) -> CollectionBundle<S, T>
fn clone(&self) -> CollectionBundle<S, T>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl<S, T> Freeze for CollectionBundle<S, T>
impl<S, T = Timestamp> !RefUnwindSafe for CollectionBundle<S, T>
impl<S, T = Timestamp> !Send for CollectionBundle<S, T>
impl<S, T = Timestamp> !Sync for CollectionBundle<S, T>
impl<S, T> Unpin for CollectionBundle<S, T>
impl<S, T = Timestamp> !UnwindSafe for CollectionBundle<S, T>
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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.source§impl<T> FutureExt for T
impl<T> FutureExt for T
source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
source§impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
RustType::from_proto
.source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
RustType::into_proto
.source§impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
source§fn plus_equals(&mut self, rhs: &&'a S)
fn plus_equals(&mut self, rhs: &&'a S)
std::ops::AddAssign
, for types that do not implement AddAssign
.source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.