Skip to main content

MaybeBucketByTime

Trait MaybeBucketByTime 

Source
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§

Source

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.

Source

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".

Implementations on Foreign Types§

Source§

impl MaybeBucketByTime for Product<Timestamp, PointStamp<u64>>

Source§

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)>>,

Source§

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)>>,

Source§

impl MaybeBucketByTime for Timestamp

Source§

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)>>,

Source§

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)>>,

Implementors§