pub trait MaybeBucketByTime: Timestamp + ColumnarData {
// Required methods
fn maybe_apply_temporal_bucketing<'scope, D>(
stream: Stream<'scope, Self, Column<(D, Self, Diff)>>,
as_of: Antichain<Timestamp>,
summary: Timestamp,
) -> Collection<'scope, Self, Column<(D, Self, Diff)>>
where D: ExchangeData + MzData + Hashable + ColumnarData,
for<'a> Ref<'a, D>: Copy + Ord + Hash,
for<'a> Ref<'a, Self>: Copy + Ord,
for<'a> Ref<'a, Diff>: Ord,
for<'a> <(D, Self, Diff) as ColumnarData>::Container: ColumnarPush<&'a (D, Self, Diff)> + ColumnarPush<Ref<'a, (D, Self, Diff)>>;
fn maybe_apply_temporal_bucketing_vec<'scope, D>(
stream: StreamVec<'scope, Self, (D, Self, Diff)>,
as_of: Antichain<Timestamp>,
summary: Timestamp,
) -> VecCollection<'scope, Self, D, Diff>
where D: ExchangeData + MzData + Hashable + ColumnarData,
for<'a> Ref<'a, D>: Copy + Ord + Hash,
for<'a> Ref<'a, Self>: Copy + Ord,
for<'a> Ref<'a, Diff>: Ord,
for<'a> <(D, Self, Diff) as ColumnarData>::Container: ColumnarPush<&'a (D, Self, Diff)> + ColumnarPush<Ref<'a, (D, Self, Diff)>>;
}Expand description
Apply temporal bucketing to a stream when the timestamp type supports it.
Sibling to RenderTimestamp: bucketing is an arrangement-time concern, not a
general property of a render timestamp, so the dispatch lives in its own trait.
Total-ordered timestamps perform real bucketing; partially-ordered timestamps
(e.g. Product<…> in iterative scopes) implement this as a no-op.
Required Methods§
Sourcefn maybe_apply_temporal_bucketing<'scope, D>(
stream: Stream<'scope, Self, Column<(D, Self, Diff)>>,
as_of: Antichain<Timestamp>,
summary: Timestamp,
) -> Collection<'scope, Self, Column<(D, Self, Diff)>>where
D: ExchangeData + MzData + Hashable + ColumnarData,
for<'a> Ref<'a, D>: Copy + Ord + Hash,
for<'a> Ref<'a, Self>: Copy + Ord,
for<'a> Ref<'a, Diff>: Ord,
for<'a> <(D, Self, Diff) as ColumnarData>::Container: ColumnarPush<&'a (D, Self, Diff)> + ColumnarPush<Ref<'a, (D, Self, Diff)>>,
fn maybe_apply_temporal_bucketing<'scope, D>(
stream: Stream<'scope, Self, Column<(D, Self, Diff)>>,
as_of: Antichain<Timestamp>,
summary: Timestamp,
) -> Collection<'scope, Self, Column<(D, Self, Diff)>>where
D: ExchangeData + MzData + Hashable + ColumnarData,
for<'a> Ref<'a, D>: Copy + Ord + Hash,
for<'a> Ref<'a, Self>: Copy + Ord,
for<'a> Ref<'a, Diff>: Ord,
for<'a> <(D, Self, Diff) as ColumnarData>::Container: ColumnarPush<&'a (D, Self, Diff)> + ColumnarPush<Ref<'a, (D, Self, Diff)>>,
Buckets a columnar dataflow edge, keeping it columnar.
Sourcefn maybe_apply_temporal_bucketing_vec<'scope, D>(
stream: StreamVec<'scope, Self, (D, Self, Diff)>,
as_of: Antichain<Timestamp>,
summary: Timestamp,
) -> VecCollection<'scope, Self, D, Diff>where
D: ExchangeData + MzData + Hashable + ColumnarData,
for<'a> Ref<'a, D>: Copy + Ord + Hash,
for<'a> Ref<'a, Self>: Copy + Ord,
for<'a> Ref<'a, Diff>: Ord,
for<'a> <(D, Self, Diff) as ColumnarData>::Container: ColumnarPush<&'a (D, Self, Diff)> + ColumnarPush<Ref<'a, (D, Self, Diff)>>,
fn maybe_apply_temporal_bucketing_vec<'scope, D>(
stream: StreamVec<'scope, Self, (D, Self, Diff)>,
as_of: Antichain<Timestamp>,
summary: Timestamp,
) -> VecCollection<'scope, Self, D, Diff>where
D: ExchangeData + MzData + Hashable + ColumnarData,
for<'a> Ref<'a, D>: Copy + Ord + Hash,
for<'a> Ref<'a, Self>: Copy + Ord,
for<'a> Ref<'a, Diff>: Ord,
for<'a> <(D, Self, Diff) as ColumnarData>::Container: ColumnarPush<&'a (D, Self, Diff)> + ColumnarPush<Ref<'a, (D, Self, Diff)>>,
Buckets a Vec stream, keeping it Vec.
For a consumer that re-encodes what it reads, where a Vec hands it moved
allocations rather than copied bytes. The reduce key-value path is the one
such caller, since its bucketed output feeds an arrangement.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".