KeyValue<K,A> + KeyValue<K,B> → RJoin
Correlates exactly two keyed inputs and exposes their accumulated values to one stateful callback.
When to use
Use Join when two event families share one correlation key and the side that may trigger processing is part of the contract.
Behavior
- The primary source is storage slot
0; the single additional source is slot1. Arrival order is unrestricted. - Values accumulate as
left[]andright[]for each K; A and B may be different types. - joinType determines callback eligibility after each arrival: Inner requires both arrays, Left requires left, Right requires right, and Outer always qualifies.
- The callback may emit zero or more R values. Returning
truemarks K complete and deletes all retained values; returningfalsekeeps them for later arrivals. - With a positive TTL, expiry performs one final eligibility check and then removes the key. A message context deadline overrides the configured TTL for that key.
General properties
Identity, ownership and operator-specific mode.
typeTransformationTypeOperator kind. It controls available properties, valid sources and generated interfaces.
RequiredAllowed:Input, Map, Filter, Join, MultiJoin, Process, FlatMap, FlatMapIterable, KeyBy, Merge, Split, Case, Sink, CycleLink, Error, Delay, WhennamestringHuman-readable stream name shown in the designer and used to derive default generated symbols.
RequiredjoinTypeInner | Left | Right | OuterInner calls only when both sides are present; Left requires the primary side; Right requires the additional side; Outer calls after every arrival.
LeftAllowed: Inner, Left, Right, OuterjoinStorageHashMapState backend for values accumulated by key. The schema also reserves RocksDB and Aerospike enum values, but HashMap is the only backend currently implemented and exposed by the Designer.
HashMapAllowed: HashMapserviceServiceService that owns the stream. Connected streams must belong to the same service.
RequiredConnections properties
Upstream graph references accepted by this operator.
leftSourceKeyValue<K,V0> streamPrimary keyed input stored in value slot 0. Join and MultiJoin callback eligibility is anchored to this input.
rightSourceKeyValue<K,V1> streamThe one additional input accepted by Join. It is stored in value slot 1; its key type K must equal the primary key type.
Data Types properties
Message contracts visible at this node.
valueTypeTypeOutput or response message contract. The exact meaning is operator-specific.
RequiredDefault:UnknownTypeFunction properties
Generated business-logic implementation and its placement.
functionNamesymbolGenerated business-logic type or function name.
RequiredfunctionPackagerelative pathOptional placement below the target-language functions root. Leave empty to use that root directly. A value such as folder/sub-folder is relative to the private or public functions root selected by publicFunction; nested-path handling is language-specific and is documented in Code Generation / Packages and Modules.
empty (functions root)publicFunctionbooleanPlaces the generated function in a shared package instead of the service-internal package.
Default:falsefunctionDescriptiontextDocumentation comment emitted with the generated function.
functionInitializerGroupstringDependency-injection initialization group for the generated function.
functionModuleModuleShared module that owns the function.
Visible when publicFunction is true.Execution properties
Pipeline placement and runtime policy.
pipelinestringVisual and configuration grouping inside the owning service.
ttlmillisecondsMaximum configured lifetime of retained state for one key. 0 disables configured expiry. A message context deadline becomes the effective deadline for that key when present.
0Minimum: 0renewTTLbooleanWhen the callback returns false, move the key back to active storage and renew its positive TTL after another value arrives.
falsePosition properties
Designer-only canvas coordinates.
xPosnumberHorizontal designer coordinate. It has no runtime effect.
RequiredyPosnumberVertical designer coordinate. It has no runtime effect.
RequiredConfiguration example
type: Join
source: keyOrdersForJoin
sources: [keyPaymentsForJoin]
joinType: Inner
joinStorage: HashMap
ttl: 60000
renewTTL: true
valueType: analyticsResult
functionName: JoinOrderPaymentAnalytics