pub struct DataflowDescription<P, S: 'static = (), T = Timestamp> {
    pub source_imports: BTreeMap<GlobalId, (SourceInstanceDesc<S>, bool)>,
    pub index_imports: BTreeMap<GlobalId, IndexImport>,
    pub objects_to_build: Vec<BuildDesc<P>>,
    pub index_exports: BTreeMap<GlobalId, (IndexDesc, RelationType)>,
    pub sink_exports: BTreeMap<GlobalId, ComputeSinkDesc<S, T>>,
    pub as_of: Option<Antichain<T>>,
    pub until: Antichain<T>,
    pub debug_name: String,
}
Expand description

A description of a dataflow to construct and results to surface.

Fields§

§source_imports: BTreeMap<GlobalId, (SourceInstanceDesc<S>, bool)>

Sources instantiations made available to the dataflow pair with monotonicity information.

§index_imports: BTreeMap<GlobalId, IndexImport>

Indexes made available to the dataflow. (id of index, import)

§objects_to_build: Vec<BuildDesc<P>>

Views and indexes to be built and stored in the local context. Objects must be built in the specific order, as there may be dependencies of later objects on prior identifiers.

§index_exports: BTreeMap<GlobalId, (IndexDesc, RelationType)>

Indexes to be made available to be shared with other dataflows (id of new index, description of index, relationtype of base source/view/table)

§sink_exports: BTreeMap<GlobalId, ComputeSinkDesc<S, T>>

sinks to be created (id of new sink, description of sink)

§as_of: Option<Antichain<T>>

An optional frontier to which inputs should be advanced.

If this is set, it should override the default setting determined by the upper bound of since frontiers contributing to the dataflow. It is an error for this to be set to a frontier not beyond that default.

§until: Antichain<T>

Frontier beyond which the dataflow should not execute. Specifically, updates at times greater or equal to this frontier are suppressed. This is often set to as_of + 1 to enable “batch” computations.

§debug_name: String

Human readable name

Implementations§

source§

impl<'a> DataflowDescription<Plan>

source§

impl<'a> DataflowDescription<OptimizedMirRelationExpr>

source§

impl<T> DataflowDescription<Plan<T>, (), Timestamp>

source

pub fn is_single_time(&self) -> bool

Tests if the dataflow refers to a single timestamp, namely that as_of has a single coordinate and that the until value corresponds to the as_of value plus one.

source§

impl<T> DataflowDescription<OptimizedMirRelationExpr, (), T>

source

pub fn new(name: String) -> Self

Creates a new dataflow description with a human-readable name.

source

pub fn import_index( &mut self, id: GlobalId, desc: IndexDesc, typ: RelationType, monotonic: bool )

Imports a previously exported index.

This method makes available an index previously exported as id, identified to the query by description (which names the view the index arranges, and the keys by which it is arranged).

source

pub fn import_source( &mut self, id: GlobalId, typ: RelationType, monotonic: bool )

Imports a source and makes it available as id.

source

pub fn insert_plan(&mut self, id: GlobalId, plan: OptimizedMirRelationExpr)

Binds to id the relation expression plan.

source

pub fn export_index( &mut self, id: GlobalId, description: IndexDesc, on_type: RelationType )

Exports as id an index described by description.

Future uses of import_index in other dataflow descriptions may use id, as long as this dataflow has not been terminated in the meantime.

source

pub fn export_sink(&mut self, id: GlobalId, description: ComputeSinkDesc<(), T>)

Exports as id a sink described by description.

source

pub fn is_imported(&self, id: &GlobalId) -> bool

Returns true iff id is already imported.

source

pub fn set_as_of(&mut self, as_of: Antichain<T>)

Assigns the as_of frontier to the supplied argument.

This method allows the dataflow to indicate a frontier up through which all times should be advanced. This can be done for at least two reasons: 1. correctness and 2. performance.

Correctness may require an as_of to ensure that historical detail is consolidated at representative times that do not present specific detail that is not specifically correct. For example, updates may be compacted to times that are no longer the source times, but instead some byproduct of when compaction was executed; we should not present those specific times as meaningfully different from other equivalent times.

Performance may benefit from an aggressive as_of as it reduces the number of distinct moments at which collections vary. Differential dataflow will refresh its outputs at each time its inputs change and to moderate that we can minimize the volume of distinct input times as much as possible.

Generally, one should consider setting as_of at least to the since frontiers of contributing data sources and as aggressively as the computation permits.

source

pub fn arity_of(&self, id: &GlobalId) -> usize

The number of columns associated with an identifier in the dataflow.

source

pub fn visit_children<R, S, E>(&mut self, r: R, s: S) -> Result<(), E>where R: Fn(&mut OptimizedMirRelationExpr) -> Result<(), E>, S: Fn(&mut MirScalarExpr) -> Result<(), E>,

Calls r and s on any sub-members of those types in self. Halts at the first error return.

source§

impl<P, S, T> DataflowDescription<P, S, T>where P: CollectionPlan,

source

pub fn export_ids(&self) -> impl Iterator<Item = GlobalId> + '_

Identifiers of exported objects (indexes and sinks).

source

pub fn subscribe_ids(&self) -> impl Iterator<Item = GlobalId> + '_

Identifiers of exported subscribe sinks.

source

pub fn build_desc(&self, id: GlobalId) -> &BuildDesc<P>

Returns the description of the object to build with the specified identifier.

Panics

Panics if id is not present in objects_to_build exactly once.

source

pub fn depends_on(&self, collection_id: GlobalId) -> BTreeSet<GlobalId>

Computes the set of identifiers upon which the specified collection identifier depends.

collection_id must specify a valid object in objects_to_build.

This method includes identifiers for e.g. intermediate views, and should be filtered if one only wants sources and indexes.

This method is safe for mutually recursive view definitions.

source

pub fn depends_on_into( &self, collection_id: GlobalId, out: &mut BTreeSet<GlobalId> )

Like depends_on, but appends to an existing BTreeSet.

source

pub fn depends_on_imports(&self, collection_id: GlobalId) -> BTreeSet<GlobalId>

Computes the set of imports upon which the specified collection depends.

This method behaves like depends_on but filters out internal dependencies that are not included in the dataflow imports.

source§

impl<P: PartialEq, S: PartialEq, T: PartialOrder> DataflowDescription<P, S, T>

source

pub fn compatible_with(&self, other: &Self) -> bool

Determine if a dataflow description is compatible with this dataflow description.

Compatible dataflows have equal exports, imports, and objects to build. The as_of of the receiver has to be less equal the other as_of.

Trait Implementations§

source§

impl Arbitrary for DataflowDescription<Plan, CollectionMetadata, Timestamp>

§

type Strategy = BoxedStrategy<DataflowDescription<Plan<Timestamp>, CollectionMetadata, Timestamp>>

The type of Strategy used to generate values of type Self.
§

type Parameters = ()

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

fn arbitrary_with(_: Self::Parameters) -> Self::Strategy

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

fn arbitrary() -> Self::Strategy

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

impl<P: Clone, S: Clone + 'static, T: Clone> Clone for DataflowDescription<P, S, T>

source§

fn clone(&self) -> DataflowDescription<P, S, T>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<P: Debug, S: Debug + 'static, T: Debug> Debug for DataflowDescription<P, S, T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, P, S, T> Deserialize<'de> for DataflowDescription<P, S, T>where P: Deserialize<'de>, S: Deserialize<'de> + 'static, T: Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<'a> Explain<'a> for DataflowDescription<OptimizedMirRelationExpr>

§

type Context = ExplainContext<'a>

The type of the immutable context in which the explanation will be rendered.
§

type Text = ExplainMultiPlan<'a, MirRelationExpr>

The explanation type produced by a successful Explain::explain_text call.
§

type Json = ExplainMultiPlan<'a, MirRelationExpr>

The explanation type produced by a successful Explain::explain_json call.
§

type Dot = UnsupportedFormat

The explanation type produced by a successful Explain::explain_json call.
source§

fn explain_text( &'a mut self, context: &'a Self::Context ) -> Result<Self::Text, ExplainError>

Construct a Result::Ok of the Explain::Text format from the config and the context. Read more
source§

fn explain_json( &'a mut self, context: &'a Self::Context ) -> Result<Self::Text, ExplainError>

Construct a Result::Ok of the Explain::Json format from the config and the context. Read more
source§

fn explain( &'a mut self, format: &'a ExplainFormat, context: &'a Self::Context ) -> Result<String, ExplainError>

Explain an instance of Self within the given Explain::Context. Read more
source§

fn explain_dot( &'a mut self, context: &'a Self::Context ) -> Result<Self::Dot, ExplainError>

Construct a Result::Ok of the Explain::Dot format from the config and the context. Read more
source§

impl<'a> Explain<'a> for DataflowDescription<Plan>

§

type Context = ExplainContext<'a>

The type of the immutable context in which the explanation will be rendered.
§

type Text = ExplainMultiPlan<'a, Plan<Timestamp>>

The explanation type produced by a successful Explain::explain_text call.
§

type Json = ExplainMultiPlan<'a, Plan<Timestamp>>

The explanation type produced by a successful Explain::explain_json call.
§

type Dot = UnsupportedFormat

The explanation type produced by a successful Explain::explain_json call.
source§

fn explain_text( &'a mut self, context: &'a Self::Context ) -> Result<Self::Text, ExplainError>

Construct a Result::Ok of the Explain::Text format from the config and the context. Read more
source§

fn explain_json( &'a mut self, context: &'a Self::Context ) -> Result<Self::Text, ExplainError>

Construct a Result::Ok of the Explain::Json format from the config and the context. Read more
source§

fn explain( &'a mut self, format: &'a ExplainFormat, context: &'a Self::Context ) -> Result<String, ExplainError>

Explain an instance of Self within the given Explain::Context. Read more
source§

fn explain_dot( &'a mut self, context: &'a Self::Context ) -> Result<Self::Dot, ExplainError>

Construct a Result::Ok of the Explain::Dot format from the config and the context. Read more
source§

impl<P: PartialEq, S: PartialEq + 'static, T: PartialEq> PartialEq<DataflowDescription<P, S, T>> for DataflowDescription<P, S, T>

source§

fn eq(&self, other: &DataflowDescription<P, S, T>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl RustType<ProtoDataflowDescription> for DataflowDescription<Plan, CollectionMetadata>

source§

fn into_proto(&self) -> ProtoDataflowDescription

Convert a Self into a Proto value.
source§

fn from_proto( proto: ProtoDataflowDescription ) -> Result<Self, TryFromProtoError>

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

impl<P, S, T> Serialize for DataflowDescription<P, S, T>where P: Serialize, S: Serialize + 'static, T: Serialize,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<P: Eq, S: Eq + 'static, T: Eq> Eq for DataflowDescription<P, S, T>

source§

impl<P, S: 'static, T> StructuralEq for DataflowDescription<P, S, T>

source§

impl<P, S: 'static, T> StructuralPartialEq for DataflowDescription<P, S, T>

Auto Trait Implementations§

§

impl<P, S, T> RefUnwindSafe for DataflowDescription<P, S, T>where P: RefUnwindSafe, S: RefUnwindSafe, T: RefUnwindSafe,

§

impl<P, S, T> Send for DataflowDescription<P, S, T>where P: Send, S: Send, T: Send,

§

impl<P, S, T> Sync for DataflowDescription<P, S, T>where P: Sync, S: Sync, T: Sync,

§

impl<P, S, T> Unpin for DataflowDescription<P, S, T>where P: Unpin, T: Unpin,

§

impl<P, S, T> UnwindSafe for DataflowDescription<P, S, T>where P: UnwindSafe, S: RefUnwindSafe, T: UnwindSafe + RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> DynClone for Twhere T: Clone,

source§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

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

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

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

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FromRef<T> for Twhere T: Clone,

source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
source§

impl<T> FutureExt for T

source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

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

fn with_current_context(self) -> WithContext<Self>

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

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

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

fn in_current_span(self) -> Instrumented<Self>

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

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

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

source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
source§

impl<T> Pointable for T

source§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ProgressEventTimestamp for Twhere T: Data + Debug + Any,

source§

fn as_any(&self) -> &(dyn Any + 'static)

Upcasts this ProgressEventTimestamp to Any. Read more
source§

fn type_name(&self) -> &'static str

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

impl<P, R> ProtoType<R> for Pwhere R: RustType<P>,

source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> Data for Twhere T: Clone + 'static,

source§

impl<T> Data for Twhere T: Send + Sync + Any + Serialize + for<'a> Deserialize<'a> + 'static,

source§

impl<T> DeserializeOwned for Twhere T: for<'de> Deserialize<'de>,

source§

impl<T> ExchangeData for Twhere T: Data + Data,