SAService Architect Back to designer
SAService ArchitectDocumentation
Stream type KV<K,A> + KV<K,B> → R

Join

Combines two keyed streams using a stateful matching policy.

When to use

Use Join for two-way keyed correlation where arrival order and missing sides matter.

Behavior

  • Stores unmatched values by key.
  • joinType controls when output is allowed.
  • The function combines both sides into R.

General properties

Identity, ownership and operator-specific mode.

PropertyTypeDescription
typeTransformationType

Operator 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, When
namestring

Human-readable stream name shown in the designer and used to derive default generated symbols.

Required
joinTypeInner | Left | Right | Outer

Controls which side can produce output when a matching key is absent.

Default: LeftAllowed: Inner, Left, Right, Outer
joinStorageHashMap | RocksDB | Aerospike

State backend used for pending keyed values.

Default: HashMapAllowed: HashMap, RocksDB, Aerospike
serviceService

Service that owns the stream. Connected streams must belong to the same service.

Required

Connections properties

Upstream graph references accepted by this operator.

PropertyTypeDescription
leftSourceKeyed stream

Primary keyed input of Join or MultiJoin.

Required
rightSourceKeyed stream

Second keyed input of Join. Its key type must equal the left key type.

Required

Data Types properties

Message contracts visible at this node.

PropertyTypeDescription
valueTypeType

Output or response message contract. The exact meaning is operator-specific.

RequiredDefault: UnknownType

Function properties

Generated business-logic implementation and its placement.

PropertyTypeDescription
functionNamesymbol

Generated business-logic type or function name.

Required
functionPackagestring

Subdirectory under the generated functions package.

publicFunctionboolean

Places the generated function in a shared package instead of the service-internal package.

Default: false
functionDescriptiontext

Documentation comment emitted with the generated function.

functionInitializerGroupstring

Dependency-injection initialization group for the generated function.

functionModuleModule

Shared module that owns the function.

Visible when publicFunction is true.

Execution properties

Pipeline placement and runtime policy.

PropertyTypeDescription
pipelinestring

Visual and configuration grouping inside the owning service.

ttlmilliseconds

Lifetime of unmatched join state. Zero uses the runtime default/no expiry behavior.

Default: 0Minimum: 0
renewTTLboolean

Resets TTL whenever another value for the same key arrives.

Default: false

Position properties

Designer-only canvas coordinates.

PropertyTypeDescription
xPosnumber

Horizontal designer coordinate. It has no runtime effect.

Required
yPosnumber

Vertical designer coordinate. It has no runtime effect.

Required

Configuration example

type: Join
leftSource: orderById
rightSource: paymentByOrder
joinType: Left
joinStorage: HashMap
ttl: 30000
valueType: PaidOrder