diff --git a/docs/ksml-language-spec.json b/docs/ksml-language-spec.json index f67e4032..b9558e66 100644 --- a/docs/ksml-language-spec.json +++ b/docs/ksml-language-spec.json @@ -1 +1 @@ -{"additionalProperties":false,"definitions":{"AggregateOperation":{"additionalProperties":false,"description":"An aggregate operation","properties":{"adder":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/AggregatorDefinitionWithImplicitType"}],"description":"*(optional)* (GroupedTable) A function that adds a record to the aggregation result"},"aggregator":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/AggregatorDefinitionWithImplicitType"}],"description":"*(optional)* (GroupedStream, SessionWindowedStream, TimeWindowedStream) The aggregator function, which combines a value with the previous aggregation result and outputs a new aggregation result"},"initializer":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/InitializerDefinitionWithImplicitType"}],"description":"The initializer function, which generates an initial value for every set of aggregated records"},"merger":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/MergerDefinitionWithImplicitType"}],"description":"*(optional)* (SessionWindowedStream, SessionWindowedCogroupedStream) A function that combines two aggregation results"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/WindowStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the result aggregation"},"subtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/AggregatorDefinitionWithImplicitType"}],"description":"*(optional)* (GroupedTable) A function that removes a record from the aggregation result"},"type":{"description":"The type of the operation","enum":["aggregate"]}},"required":["initializer","type"],"title":"AggregateOperation","type":"object"},"AggregatorDefinition":{"additionalProperties":false,"description":"Defines a aggregator function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the aggregator"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the aggregator. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the aggregator. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the aggregator. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the aggregator","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the aggregator. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the aggregator uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["aggregator"]}},"required":["type"],"title":"AggregatorDefinition","type":"object"},"AggregatorDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a aggregator function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the aggregator"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the aggregator. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the aggregator. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the aggregator. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the aggregator","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the aggregator. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the aggregator uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"AggregatorDefinitionWithImplicitType","type":"object"},"BranchDefinitionWithPipeline":{"additionalProperties":false,"description":"Defines a branch with sub-pipeline in a BranchOperation","properties":{"as":{"description":"*(optional)* The name to register the pipeline result under, which can be used as source by follow-up pipelines","type":"string"},"branch":{"description":"*(optional)* Defines a single branch, consisting of a condition and a pipeline to execute for messages that fulfil the predicate","items":{"$ref":"#/definitions/StringOrInlinePredicateDefinitionWithImplicitType"},"type":"array"},"forEach":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ForEachActionDefinitionWithImplicitType"}],"description":"*(optional)* A function that gets called for every message in the stream"},"if":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/PredicateDefinitionWithImplicitType"}],"description":"*(optional)* Defines the condition under which messages get sent down this branch"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"print":{"$ref":"#/definitions/PrintOperation","description":"*(optional)* The specification of where to print messages to"},"stores":{"description":"*(optional)* The names of all state stores used by the function","items":{"type":"string"},"type":"array"},"to":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ToTopicDefinition"}],"description":"*(optional)* Ends the pipeline by sending all messages to a stream, table or globalTable, or to an inline defined output topic and optional partitioner"},"toTopicNameExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ToTopicNameExtractorDefinition"}],"description":"*(optional)* Ends the pipeline by sending all messages to a topic provided by a pre-defined topic name extractor function, or to a topic provided by an inline defined topic name extractor and optional partitioner"},"via":{"description":"*(optional)* A series of operations performed on the input stream","items":{"anyOf":[{"$ref":"#/definitions/AggregateOperation"},{"$ref":"#/definitions/CogroupOperation"},{"$ref":"#/definitions/ConvertKeyOperation"},{"$ref":"#/definitions/ConvertKeyValueOperation"},{"$ref":"#/definitions/ConvertValueOperation"},{"$ref":"#/definitions/CountOperation"},{"$ref":"#/definitions/FilterNotOperation"},{"$ref":"#/definitions/FilterOperation"},{"$ref":"#/definitions/GroupByKeyOperation"},{"$ref":"#/definitions/GroupByOperation"},{"$ref":"#/definitions/JoinOperationWithGlobalTable"},{"$ref":"#/definitions/JoinOperationWithStream"},{"$ref":"#/definitions/JoinOperationWithTable"},{"$ref":"#/definitions/LeftJoinOperationWithGlobalTable"},{"$ref":"#/definitions/LeftJoinOperationWithStream"},{"$ref":"#/definitions/LeftJoinOperationWithTable"},{"$ref":"#/definitions/MergeOperation"},{"$ref":"#/definitions/OuterJoinOperationWithStream"},{"$ref":"#/definitions/OuterJoinOperationWithTable"},{"$ref":"#/definitions/PeekOperation"},{"$ref":"#/definitions/ReduceOperationWithAdderAndSubtractor"},{"$ref":"#/definitions/ReduceOperationWithReducer"},{"$ref":"#/definitions/RepartitionOperation"},{"$ref":"#/definitions/SuppressOperationUntilTimeLimit"},{"$ref":"#/definitions/SuppressOperationUntilWindowCloses"},{"$ref":"#/definitions/ToStreamOperation"},{"$ref":"#/definitions/ToTableOperation"},{"$ref":"#/definitions/TransformKeyOperation"},{"$ref":"#/definitions/TransformKeyValueOperation"},{"$ref":"#/definitions/TransformKeyValueToKeyValueListOperation"},{"$ref":"#/definitions/TransformKeyValueToValueListOperation"},{"$ref":"#/definitions/TransformMetadataOperation"},{"$ref":"#/definitions/TransformValueOperation"},{"$ref":"#/definitions/WindowBySessionOperation"},{"$ref":"#/definitions/WindowByTimeOperationWithHoppingWindow"},{"$ref":"#/definitions/WindowByTimeOperationWithSlidingWindow"},{"$ref":"#/definitions/WindowByTimeOperationWithTumblingWindow"}]},"type":"array"}},"title":"BranchDefinitionWithPipeline","type":"object"},"CogroupOperation":{"additionalProperties":false,"description":"A cogroup operation","properties":{"aggregator":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/AggregatorDefinitionWithImplicitType"}],"description":"(GroupedStream, SessionWindowedStream, TimeWindowedStream) The aggregator function, which combines a value with the previous aggregation result and outputs a new aggregation result"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/WindowStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the co-grouped stream"},"type":{"description":"The type of the operation","enum":["cogroup"]}},"required":["aggregator","type"],"title":"CogroupOperation","type":"object"},"ConvertKeyOperation":{"additionalProperties":false,"description":"An operation to convert the stream key type to another type. Conversion is only syntactic, eg. from Avro to XML.","properties":{"into":{"description":"The type to convert the stream key into","type":"string"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["convertKey"]}},"required":["into","type"],"title":"ConvertKeyOperation","type":"object"},"ConvertKeyValueOperation":{"additionalProperties":false,"description":"An operation to convert the stream key and value types to other types. Conversion is only syntactic, eg. from Avro to XML.","properties":{"into":{"description":"The tuple type to convert the stream key/value into","type":"string"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["convertKeyValue"]}},"required":["into","type"],"title":"ConvertKeyValueOperation","type":"object"},"ConvertValueOperation":{"additionalProperties":false,"description":"An operation to convert the stream value type to another type. Conversion is only syntactic, eg. from Avro to XML.","properties":{"into":{"description":"The type to convert the stream value into","type":"string"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["convertValue"]}},"required":["into","type"],"title":"ConvertValueOperation","type":"object"},"CountOperation":{"additionalProperties":false,"description":"Count the number of times a key is seen in a given window","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the count operation's result"},"type":{"description":"The type of the operation","enum":["count"]}},"required":["type"],"title":"CountOperation","type":"object"},"FilterNotOperation":{"additionalProperties":false,"description":"Filter records based on the inverse result of a predicate function","properties":{"if":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/PredicateDefinitionWithImplicitType"}],"description":"A function that returns \"false\" when records are accepted, \"true\" otherwise"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the filtered table (only applies to tables, ignored for streams)"},"stores":{"description":"*(optional)* The names of all state stores used by the function","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the operation","enum":["filterNot"]}},"required":["if","type"],"title":"FilterNotOperation","type":"object"},"FilterOperation":{"additionalProperties":false,"description":"Filter records based on a predicate function","properties":{"if":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/PredicateDefinitionWithImplicitType"}],"description":"A function that returns \"true\" when records are accepted, \"false\" otherwise"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the filtered table (only applies to tables, ignored for streams)"},"stores":{"description":"*(optional)* The names of all state stores used by the function","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the operation","enum":["filter"]}},"required":["if","type"],"title":"FilterOperation","type":"object"},"ForEachActionDefinition":{"additionalProperties":false,"description":"Defines a foreach action function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the foreach action"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the foreach action. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the foreach action. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the foreach action. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the foreach action","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the foreach action. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the foreach action uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["forEach"]}},"required":["type"],"title":"ForEachActionDefinition","type":"object"},"ForEachActionDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a foreach action function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the foreach action"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the foreach action. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the foreach action. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the foreach action. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the foreach action","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the foreach action. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the foreach action uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"ForEachActionDefinitionWithImplicitType","type":"object"},"ForeignKeyExtractorDefinition":{"additionalProperties":false,"description":"Defines a foreign key extractor function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the foreign key extractor"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the foreign key extractor. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the foreign key extractor. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the foreign key extractor. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the foreign key extractor","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the foreign key extractor. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the foreign key extractor uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["foreignKeyExtractor"]}},"required":["type"],"title":"ForeignKeyExtractorDefinition","type":"object"},"GeneratorDefinition":{"additionalProperties":false,"description":"Defines a message generator function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the message generator"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the message generator. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the message generator. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the message generator. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the message generator","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the message generator. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the message generator uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["generator"]}},"required":["type"],"title":"GeneratorDefinition","type":"object"},"GeneratorDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a message generator function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the message generator"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the message generator. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the message generator. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the message generator. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the message generator","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the message generator. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the message generator uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"GeneratorDefinitionWithImplicitType","type":"object"},"GenericFunctionDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a generic function function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the generic function"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the generic function. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the generic function. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the generic function. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the generic function","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the generic function. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the generic function uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["generic"]}},"title":"GenericFunctionDefinitionWithImplicitType","type":"object"},"GlobalTableDefinition":{"additionalProperties":false,"description":"Contains a definition of a GlobalTable, which can be referenced by producers and pipelines","properties":{"keyType":{"description":"*(optional)* The key type of the global table","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* KeyValue state store definition"},"topic":{"description":"The name of the Kafka topic for this global table","type":"string"},"valueType":{"description":"*(optional)* The value type of the global table","type":"string"}},"required":["topic"],"title":"GlobalTableDefinition","type":"object"},"GlobalTableDefinitionSource":{"additionalProperties":false,"description":"Contains a definition of a GlobalTable, which can be referenced by producers and pipelines","properties":{"keyType":{"description":"The key type of the global table","type":"string"},"offsetResetPolicy":{"description":"*(optional)* Policy that determines what to do when there is no initial offset in Kafka, or if the current offset does not exist any more on the server (e.g. because that data has been deleted)","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* KeyValue state store definition"},"timestampExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TimestampExtractorDefinitionWithImplicitType"}],"description":"*(optional)* A function extracts the event time from a consumed record"},"topic":{"description":"The name of the Kafka topic for this global table","type":"string"},"valueType":{"description":"The value type of the global table","type":"string"}},"required":["topic","keyType","valueType"],"title":"GlobalTableDefinitionSource","type":"object"},"GroupByKeyOperation":{"additionalProperties":false,"description":"Operation to group all messages with the same key together","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the grouped stream"},"type":{"description":"The type of the operation","enum":["groupByKey"]}},"required":["type"],"title":"GroupByKeyOperation","type":"object"},"GroupByOperation":{"additionalProperties":false,"description":"Operation to group all messages with together based on a keying function","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueMapperDefinitionWithImplicitType"}],"description":"Function to map records to a key they can be grouped on"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the grouped stream or table"},"type":{"description":"The type of the operation","enum":["groupBy"]}},"required":["mapper","type"],"title":"GroupByOperation","type":"object"},"InitializerDefinition":{"additionalProperties":false,"description":"Defines a initializer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the initializer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the initializer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the initializer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the initializer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the initializer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the initializer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the initializer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["initializer"]}},"required":["type"],"title":"InitializerDefinition","type":"object"},"InitializerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a initializer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the initializer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the initializer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the initializer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the initializer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the initializer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the initializer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the initializer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"InitializerDefinitionWithImplicitType","type":"object"},"JoinOperationWithGlobalTable":{"additionalProperties":false,"description":"Operation to join with a table","properties":{"globalTable":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/GlobalTableDefinition"}],"description":"A reference to the globalTable, or an inline definition of the globalTable to join with"},"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that maps the key value from the stream to the primary key type of the globalTable"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["join"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["globalTable","mapper","valueJoiner","type"],"title":"JoinOperationWithGlobalTable","type":"object"},"JoinOperationWithStream":{"additionalProperties":false,"description":"Operation to join with a stream","properties":{"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The window grace period (the time to admit out-of-order events after the end of the window)"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the joined streams"},"stream":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamDefinition"}],"description":"A reference to the Stream, or an inline definition of the stream to join with"},"timeDifference":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The maximum time difference for a join over two streams on the same key"},"type":{"description":"The type of the operation","enum":["join"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["stream","valueJoiner","timeDifference","type"],"title":"JoinOperationWithStream","type":"object"},"JoinOperationWithTable":{"additionalProperties":false,"description":"Operation to join with a table","properties":{"foreignKeyExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"*(optional)* A function that can translate the join table value to a primary key"},"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The window grace period (the time to admit out-of-order events after the end of the window)"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"otherPartitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions the records on the join table"},"partitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions the records on the primary table"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the joined streams"},"table":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TableDefinition"}],"description":"A reference to the table, or an inline definition of the table to join with"},"type":{"description":"The type of the operation","enum":["join"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["table","valueJoiner","type"],"title":"JoinOperationWithTable","type":"object"},"KeyTransformerDefinition":{"additionalProperties":false,"description":"Defines a key transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the key transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the key transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the key transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the key transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the key transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the key transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the key transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["keyTransformer"]}},"required":["type"],"title":"KeyTransformerDefinition","type":"object"},"KeyTransformerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a key transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the key transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the key transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the key transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the key transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the key transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the key transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the key transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"KeyTransformerDefinitionWithImplicitType","type":"object"},"KeyValueMapperDefinition":{"additionalProperties":false,"description":"Defines a keyvalue mapper function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue mapper"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue mapper. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue mapper. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue mapper. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue mapper","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue mapper. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue mapper uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["keyValueMapper"]}},"required":["type"],"title":"KeyValueMapperDefinition","type":"object"},"KeyValueMapperDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a keyvalue mapper function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue mapper"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue mapper. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue mapper. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue mapper. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue mapper","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue mapper. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue mapper uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"KeyValueMapperDefinitionWithImplicitType","type":"object"},"KeyValuePrinterDefinition":{"additionalProperties":false,"description":"Defines a keyvalue printer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue printer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue printer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue printer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue printer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue printer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue printer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue printer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["keyValuePrinter"]}},"required":["type"],"title":"KeyValuePrinterDefinition","type":"object"},"KeyValuePrinterDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a keyvalue printer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue printer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue printer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue printer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue printer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue printer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue printer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue printer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"KeyValuePrinterDefinitionWithImplicitType","type":"object"},"KeyValueStateStoreDefinition":{"additionalProperties":false,"description":"Definition of a keyValue state store","properties":{"caching":{"description":"*(optional)* \"true\" if changed to the keyValue store need to be buffered and periodically released, \"false\" to emit all changes directly","type":"boolean"},"historyRetention":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* (Versioned only) The duration for which old record versions are available for query (cannot be negative)"},"keyType":{"description":"*(optional)* The key type of the keyValue store","type":"string"},"logging":{"description":"*(optional)* \"true\" if a changelog topic should be set up on Kafka for this keyValue store, \"false\" otherwise","type":"boolean"},"name":{"description":"*(optional)* The name of the keyValue store. If this field is not defined, then the name is derived from the context.","type":"string"},"persistent":{"description":"*(optional)* \"true\" if this keyValue store needs to be stored on disk, \"false\" otherwise","type":"boolean"},"segmentInterval":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* Size of segments for storing old record versions (must be positive). Old record versions for the same key in a single segment are stored (updated and accessed) together. The only impact of this parameter is performance. If segments are large and a workload results in many record versions for the same key being collected in a single segment, performance may degrade as a result. On the other hand, historical reads (which access older segments) and out-of-order writes may slow down if there are too many segments."},"timestamped":{"description":"*(optional)* \"true\" if elements in the store are timestamped, \"false\" otherwise","type":"boolean"},"type":{"description":"The type of the state store","enum":["keyValue"]},"valueType":{"description":"*(optional)* The value type of the keyValue store","type":"string"},"versioned":{"description":"*(optional)* \"true\" if elements in the store are versioned, \"false\" otherwise","type":"boolean"}},"required":["type"],"title":"KeyValueStateStoreDefinition","type":"object"},"KeyValueStateStoreDefinitionWithImplicitType":{"additionalProperties":false,"description":"Definition of a keyValue state store","properties":{"caching":{"description":"*(optional)* \"true\" if changed to the keyValue store need to be buffered and periodically released, \"false\" to emit all changes directly","type":"boolean"},"historyRetention":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* (Versioned only) The duration for which old record versions are available for query (cannot be negative)"},"keyType":{"description":"*(optional)* The key type of the keyValue store","type":"string"},"logging":{"description":"*(optional)* \"true\" if a changelog topic should be set up on Kafka for this keyValue store, \"false\" otherwise","type":"boolean"},"name":{"description":"*(optional)* The name of the keyValue store. If this field is not defined, then the name is derived from the context.","type":"string"},"persistent":{"description":"*(optional)* \"true\" if this keyValue store needs to be stored on disk, \"false\" otherwise","type":"boolean"},"segmentInterval":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* Size of segments for storing old record versions (must be positive). Old record versions for the same key in a single segment are stored (updated and accessed) together. The only impact of this parameter is performance. If segments are large and a workload results in many record versions for the same key being collected in a single segment, performance may degrade as a result. On the other hand, historical reads (which access older segments) and out-of-order writes may slow down if there are too many segments."},"timestamped":{"description":"*(optional)* \"true\" if elements in the store are timestamped, \"false\" otherwise","type":"boolean"},"type":{"description":"The type of the state store","enum":["keyValue"]},"valueType":{"description":"*(optional)* The value type of the keyValue store","type":"string"},"versioned":{"description":"*(optional)* \"true\" if elements in the store are versioned, \"false\" otherwise","type":"boolean"}},"title":"KeyValueStateStoreDefinitionWithImplicitType","type":"object"},"KeyValueToKeyValueListTransformerDefinition":{"additionalProperties":false,"description":"Defines a keyvalue-to-keyvaluelist transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue-to-keyvaluelist transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue-to-keyvaluelist transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue-to-keyvaluelist transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue-to-keyvaluelist transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue-to-keyvaluelist transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue-to-keyvaluelist transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue-to-keyvaluelist transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["keyValueToKeyValueListTransformer"]}},"required":["type"],"title":"KeyValueToKeyValueListTransformerDefinition","type":"object"},"KeyValueToKeyValueListTransformerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a keyvalue-to-keyvaluelist transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue-to-keyvaluelist transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue-to-keyvaluelist transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue-to-keyvaluelist transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue-to-keyvaluelist transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue-to-keyvaluelist transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue-to-keyvaluelist transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue-to-keyvaluelist transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"KeyValueToKeyValueListTransformerDefinitionWithImplicitType","type":"object"},"KeyValueToValueListTransformerDefinition":{"additionalProperties":false,"description":"Defines a keyvalue-to-valuelist transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue-to-valuelist transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue-to-valuelist transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue-to-valuelist transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue-to-valuelist transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue-to-valuelist transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue-to-valuelist transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue-to-valuelist transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["keyValueToValueListTransformer"]}},"required":["type"],"title":"KeyValueToValueListTransformerDefinition","type":"object"},"KeyValueToValueListTransformerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a keyvalue-to-valuelist transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue-to-valuelist transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue-to-valuelist transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue-to-valuelist transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue-to-valuelist transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue-to-valuelist transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue-to-valuelist transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue-to-valuelist transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"KeyValueToValueListTransformerDefinitionWithImplicitType","type":"object"},"KeyValueTransformerDefinition":{"additionalProperties":false,"description":"Defines a keyvalue transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["keyValueTransformer"]}},"required":["type"],"title":"KeyValueTransformerDefinition","type":"object"},"KeyValueTransformerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a keyvalue transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"KeyValueTransformerDefinitionWithImplicitType","type":"object"},"LeftJoinOperationWithGlobalTable":{"additionalProperties":false,"description":"Operation to leftJoin with a globalTable","properties":{"globalTable":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/GlobalTableDefinition"}],"description":"A reference to the globalTable, or an inline definition of the globalTable to join with"},"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that maps the key value from the stream with the primary key of the globalTable"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["leftJoin"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["globalTable","mapper","valueJoiner","type"],"title":"LeftJoinOperationWithGlobalTable","type":"object"},"LeftJoinOperationWithStream":{"additionalProperties":false,"description":"Operation to leftJoin with a stream","properties":{"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The window grace period (the time to admit out-of-order events after the end of the window)"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the joined streams"},"stream":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamDefinition"}],"description":"A reference to the stream, or an inline definition of the stream to leftJoin with"},"timeDifference":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The maximum time difference for a leftJoin over two streams on the same key"},"type":{"description":"The type of the operation","enum":["leftJoin"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["stream","valueJoiner","timeDifference","type"],"title":"LeftJoinOperationWithStream","type":"object"},"LeftJoinOperationWithTable":{"additionalProperties":false,"description":"Operation to leftJoin with a table","properties":{"foreignKeyExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"*(optional)* A function that can translate the join table value to a primary key"},"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The window grace period (the time to admit out-of-order events after the end of the window)"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"otherPartitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions the records on the join table"},"partitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions the records on the primary table"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the joined streams"},"table":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TableDefinition"}],"description":"A reference to the Table, or an inline definition of the Table to join with"},"type":{"description":"The type of the operation","enum":["leftJoin"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["table","valueJoiner","type"],"title":"LeftJoinOperationWithTable","type":"object"},"MergeOperation":{"additionalProperties":false,"description":"A merge operation to join two Streams","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"stream":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamDefinitionSource"}],"description":"The stream to merge with"},"type":{"description":"The type of the operation","enum":["merge"]}},"required":["stream","type"],"title":"MergeOperation","type":"object"},"MergerDefinition":{"additionalProperties":false,"description":"Defines a merger function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the merger"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the merger. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the merger. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the merger. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the merger","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the merger. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the merger uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["merger"]}},"required":["type"],"title":"MergerDefinition","type":"object"},"MergerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a merger function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the merger"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the merger. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the merger. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the merger. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the merger","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the merger. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the merger uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"MergerDefinitionWithImplicitType","type":"object"},"MetadataTransformerDefinition":{"additionalProperties":false,"description":"Defines a metadata transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the metadata transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the metadata transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the metadata transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the metadata transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the metadata transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the metadata transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the metadata transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["metadataTransformer"]}},"required":["type"],"title":"MetadataTransformerDefinition","type":"object"},"MetadataTransformerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a metadata transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the metadata transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the metadata transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the metadata transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the metadata transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the metadata transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the metadata transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the metadata transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"MetadataTransformerDefinitionWithImplicitType","type":"object"},"OuterJoinOperationWithStream":{"additionalProperties":false,"description":"Operation to outerJoin with a stream","properties":{"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The window grace period (the time to admit out-of-order events after the end of the window)"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the outerJoined streams"},"stream":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamDefinition"}],"description":"A reference to the stream, or an inline definition of the stream to outerJoin with"},"timeDifference":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The maximum time difference for an outerJoin over two streams on the same key"},"type":{"description":"The type of the operation","enum":["outerJoin"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["stream","valueJoiner","timeDifference","type"],"title":"OuterJoinOperationWithStream","type":"object"},"OuterJoinOperationWithTable":{"additionalProperties":false,"description":"Operation to outerJoin with a table","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the outerJoined streams"},"table":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TableDefinition"}],"description":"A reference to the table, or an inline definition of the table to outerJoin with"},"type":{"description":"The type of the operation","enum":["outerJoin"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["table","valueJoiner","type"],"title":"OuterJoinOperationWithTable","type":"object"},"ParameterDefinition":{"additionalProperties":false,"description":"Defines a parameter for a user function","properties":{"defaultValue":{"description":"*(optional)* The default value for the parameter","type":"string"},"name":{"description":"The name of the parameter","type":"string"},"type":{"description":"The type of the parameter","type":"string"}},"required":["name","type"],"title":"ParameterDefinition","type":"object"},"PeekOperation":{"additionalProperties":false,"description":"Operation to peek into a stream, without modifying the stream contents","properties":{"forEach":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ForEachActionDefinitionWithImplicitType"}],"description":"A function that gets called for every message in the stream"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"stores":{"description":"*(optional)* The names of all state stores used by the function","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the operation","enum":["peek"]}},"required":["forEach","type"],"title":"PeekOperation","type":"object"},"PipelineDefinition":{"additionalProperties":false,"description":"Defines a pipeline through a source, a series of operations to perform on it and a sink operation to close the stream with","properties":{"as":{"description":"*(optional)* The name to register the pipeline result under, which can be used as source by follow-up pipelines","type":"string"},"branch":{"description":"*(optional)* Defines a single branch, consisting of a condition and a pipeline to execute for messages that fulfil the predicate","items":{"$ref":"#/definitions/BranchDefinitionWithPipeline"},"type":"array"},"forEach":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ForEachActionDefinitionWithImplicitType"}],"description":"*(optional)* A function that gets called for every message in the stream"},"from":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TopicDefinitionSource"}],"description":"Pipeline source"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"print":{"$ref":"#/definitions/PrintOperation","description":"*(optional)* The specification of where to print messages to"},"stores":{"description":"*(optional)* The names of all state stores used by the function","items":{"type":"string"},"type":"array"},"to":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ToTopicDefinition"}],"description":"*(optional)* Ends the pipeline by sending all messages to a stream, table or globalTable, or to an inline defined output topic and optional partitioner"},"toTopicNameExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ToTopicNameExtractorDefinition"}],"description":"*(optional)* Ends the pipeline by sending all messages to a topic provided by a pre-defined topic name extractor function, or to a topic provided by an inline defined topic name extractor and optional partitioner"},"via":{"description":"*(optional)* A series of operations performed on the input stream","items":{"anyOf":[{"$ref":"#/definitions/AggregateOperation"},{"$ref":"#/definitions/CogroupOperation"},{"$ref":"#/definitions/ConvertKeyOperation"},{"$ref":"#/definitions/ConvertKeyValueOperation"},{"$ref":"#/definitions/ConvertValueOperation"},{"$ref":"#/definitions/CountOperation"},{"$ref":"#/definitions/FilterNotOperation"},{"$ref":"#/definitions/FilterOperation"},{"$ref":"#/definitions/GroupByKeyOperation"},{"$ref":"#/definitions/GroupByOperation"},{"$ref":"#/definitions/JoinOperationWithGlobalTable"},{"$ref":"#/definitions/JoinOperationWithStream"},{"$ref":"#/definitions/JoinOperationWithTable"},{"$ref":"#/definitions/LeftJoinOperationWithGlobalTable"},{"$ref":"#/definitions/LeftJoinOperationWithStream"},{"$ref":"#/definitions/LeftJoinOperationWithTable"},{"$ref":"#/definitions/MergeOperation"},{"$ref":"#/definitions/OuterJoinOperationWithStream"},{"$ref":"#/definitions/OuterJoinOperationWithTable"},{"$ref":"#/definitions/PeekOperation"},{"$ref":"#/definitions/ReduceOperationWithAdderAndSubtractor"},{"$ref":"#/definitions/ReduceOperationWithReducer"},{"$ref":"#/definitions/RepartitionOperation"},{"$ref":"#/definitions/SuppressOperationUntilTimeLimit"},{"$ref":"#/definitions/SuppressOperationUntilWindowCloses"},{"$ref":"#/definitions/ToStreamOperation"},{"$ref":"#/definitions/ToTableOperation"},{"$ref":"#/definitions/TransformKeyOperation"},{"$ref":"#/definitions/TransformKeyValueOperation"},{"$ref":"#/definitions/TransformKeyValueToKeyValueListOperation"},{"$ref":"#/definitions/TransformKeyValueToValueListOperation"},{"$ref":"#/definitions/TransformMetadataOperation"},{"$ref":"#/definitions/TransformValueOperation"},{"$ref":"#/definitions/WindowBySessionOperation"},{"$ref":"#/definitions/WindowByTimeOperationWithHoppingWindow"},{"$ref":"#/definitions/WindowByTimeOperationWithSlidingWindow"},{"$ref":"#/definitions/WindowByTimeOperationWithTumblingWindow"}]},"type":"array"}},"required":["from"],"title":"PipelineDefinition","type":"object"},"PredicateDefinition":{"additionalProperties":false,"description":"Defines a Function that returns true or false based on key/value input function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the Function that returns true or false based on key/value input"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the Function that returns true or false based on key/value input. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the Function that returns true or false based on key/value input. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the Function that returns true or false based on key/value input. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the Function that returns true or false based on key/value input","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the Function that returns true or false based on key/value input. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the Function that returns true or false based on key/value input uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["predicate"]}},"required":["type"],"title":"PredicateDefinition","type":"object"},"PredicateDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a Function that returns true or false based on key/value input function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the Function that returns true or false based on key/value input"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the Function that returns true or false based on key/value input. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the Function that returns true or false based on key/value input. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the Function that returns true or false based on key/value input. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the Function that returns true or false based on key/value input","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the Function that returns true or false based on key/value input. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the Function that returns true or false based on key/value input uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"PredicateDefinitionWithImplicitType","type":"object"},"PrintOperation":{"additionalProperties":false,"description":"Operation to print the contents of a pipeline on the screen or to write them to a file","properties":{"filename":{"description":"*(optional)* The filename to output records to. If nothing is specified, then messages will be printed on stdout.","type":"string"},"label":{"description":"*(optional)* A label to attach to the output records","type":"string"},"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValuePrinterDefinitionWithImplicitType"}],"description":"*(optional)* A function to convert record into a string for output"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"}},"title":"PrintOperation","type":"object"},"ProducerDefinition":{"additionalProperties":false,"description":"Definition of a Producer that regularly generates messages for a topic","properties":{"condition":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/PredicateDefinitionWithImplicitType"}],"description":"*(optional)* A function that validates the generator's result message. Returns \"true\" when the message may be produced on the topic, \"false\" otherwise."},"count":{"description":"*(optional)* The number of messages to produce."},"generator":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/GeneratorDefinitionWithImplicitType"}],"description":"The function that generates records"},"interval":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The interval with which the generator is called"},"to":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TopicDefinition"}],"description":"The topic to produce to"},"until":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/PredicateDefinitionWithImplicitType"}],"description":"*(optional)* A predicate that returns true to indicate producing should stop."}},"required":["generator","interval","to"],"title":"ProducerDefinition","type":"object"},"ReduceOperationWithAdderAndSubtractor":{"additionalProperties":false,"description":"Operation to reduce a series of records into a single aggregate result","properties":{"adder":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ReducerDefinitionWithImplicitType"}],"description":"A function that adds a record to the aggregate result"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/WindowStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the aggregation"},"subtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ReducerDefinitionWithImplicitType"}],"description":"A function that removes a record from the aggregate result"},"type":{"description":"The type of the operation","enum":["reduce"]}},"required":["adder","subtractor","type"],"title":"ReduceOperationWithAdderAndSubtractor","type":"object"},"ReduceOperationWithReducer":{"additionalProperties":false,"description":"Operation to reduce a series of records into a single aggregate result","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"reducer":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ReducerDefinitionWithImplicitType"}],"description":"A function that computes a new aggregate result"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/WindowStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the aggregation"},"type":{"description":"The type of the operation","enum":["reduce"]}},"required":["reducer","type"],"title":"ReduceOperationWithReducer","type":"object"},"ReducerDefinition":{"additionalProperties":false,"description":"Defines a reducer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the reducer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the reducer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the reducer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the reducer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the reducer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the reducer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the reducer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["reducer"]}},"required":["type"],"title":"ReducerDefinition","type":"object"},"ReducerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a reducer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the reducer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the reducer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the reducer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the reducer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the reducer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the reducer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the reducer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"ReducerDefinitionWithImplicitType","type":"object"},"RepartitionOperation":{"additionalProperties":false,"description":"Operation to (re)partition a stream","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"numberOfPartitions":{"description":"*(optional)* The target number of partitions"},"partitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions stream records"},"type":{"description":"The type of the operation","enum":["repartition"]}},"required":["type"],"title":"RepartitionOperation","type":"object"},"SessionStateStoreDefinition":{"additionalProperties":false,"description":"Definition of a session state store","properties":{"caching":{"description":"*(optional)* \"true\" if changed to the session store need to be buffered and periodically released, \"false\" to emit all changes directly","type":"boolean"},"keyType":{"description":"*(optional)* The key type of the session store","type":"string"},"logging":{"description":"*(optional)* \"true\" if a changelog topic should be set up on Kafka for this session store, \"false\" otherwise","type":"boolean"},"name":{"description":"*(optional)* The name of the session store. If this field is not defined, then the name is derived from the context.","type":"string"},"persistent":{"description":"*(optional)* \"true\" if this session store needs to be stored on disk, \"false\" otherwise","type":"boolean"},"retention":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The duration for which elements in the session store are retained"},"timestamped":{"description":"*(optional)* \"true\" if elements in the store are timestamped, \"false\" otherwise","type":"boolean"},"type":{"description":"The type of the state store","enum":["session"]},"valueType":{"description":"*(optional)* The value type of the session store","type":"string"}},"required":["type"],"title":"SessionStateStoreDefinition","type":"object"},"StreamDefinition":{"additionalProperties":false,"description":"Contains a definition of a Stream, which can be referenced by producers and pipelines","properties":{"keyType":{"description":"*(optional)* The key type of the stream","type":"string"},"topic":{"description":"The name of the Kafka topic for this stream","type":"string"},"valueType":{"description":"*(optional)* The value type of the stream","type":"string"}},"required":["topic"],"title":"StreamDefinition","type":"object"},"StreamDefinitionSource":{"additionalProperties":false,"description":"Contains a definition of a Stream, which can be referenced by producers and pipelines","properties":{"keyType":{"description":"The key type of the stream","type":"string"},"offsetResetPolicy":{"description":"*(optional)* Policy that determines what to do when there is no initial offset in Kafka, or if the current offset does not exist any more on the server (e.g. because that data has been deleted)","type":"string"},"timestampExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TimestampExtractorDefinitionWithImplicitType"}],"description":"*(optional)* A function extracts the event time from a consumed record"},"topic":{"description":"The name of the Kafka topic for this stream","type":"string"},"valueType":{"description":"The value type of the stream","type":"string"}},"required":["topic","keyType","valueType"],"title":"StreamDefinitionSource","type":"object"},"StreamPartitionerDefinition":{"additionalProperties":false,"description":"Defines a stream partitioner function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the stream partitioner"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the stream partitioner. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the stream partitioner. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the stream partitioner. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the stream partitioner","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the stream partitioner. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the stream partitioner uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["streamPartitioner"]}},"required":["type"],"title":"StreamPartitionerDefinition","type":"object"},"StreamPartitionerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a stream partitioner function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the stream partitioner"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the stream partitioner. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the stream partitioner. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the stream partitioner. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the stream partitioner","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the stream partitioner. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the stream partitioner uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"StreamPartitionerDefinitionWithImplicitType","type":"object"},"StringOrInlinePredicateDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines the condition under which messages get sent down this branch","properties":{"if":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/PredicateDefinitionWithImplicitType"}],"description":"*(optional)* Defines the condition under which messages get sent down this branch"}},"title":"StringOrInlinePredicateDefinitionWithImplicitType","type":"object"},"SuppressOperationUntilTimeLimit":{"additionalProperties":false,"description":"Operation to suppress messages in the source stream until a time limit is reached","properties":{"bufferFullStrategy":{"description":"*(optional)* What to do when the buffer is full","enum":["emitEarlyWhenFull","shutdownWhenFull"]},"duration":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The duration for which messages are suppressed"},"maxBytes":{"description":"*(optional)* The maximum number of bytes in the buffer","type":"string"},"maxRecords":{"description":"*(optional)* The maximum number of records in the buffer","type":"string"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["suppress"]},"until":{"description":"The until of the Operation to suppress messages in the source stream until a certain limit is reached","enum":["timeLimit"]}},"required":["duration","until","type"],"title":"SuppressOperationUntilTimeLimit","type":"object"},"SuppressOperationUntilWindowCloses":{"additionalProperties":false,"description":"Operation to suppress messages in the source stream until a window limit is reached","properties":{"bufferFullStrategy":{"description":"*(optional)* What to do when the buffer is full","enum":["emitEarlyWhenFull","shutdownWhenFull"]},"maxBytes":{"description":"*(optional)* The maximum number of bytes in the buffer","type":"string"},"maxRecords":{"description":"*(optional)* The maximum number of records in the buffer","type":"string"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["suppress"]},"until":{"description":"The until of the Operation to suppress messages in the source stream until a certain limit is reached","enum":["windowCloses"]}},"required":["until","type"],"title":"SuppressOperationUntilWindowCloses","type":"object"},"TableDefinition":{"additionalProperties":false,"description":"Contains a definition of a Table, which can be referenced by producers and pipelines","properties":{"keyType":{"description":"*(optional)* The key type of the table","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* KeyValue state store definition"},"topic":{"description":"The name of the Kafka topic for this table","type":"string"},"valueType":{"description":"*(optional)* The value type of the table","type":"string"}},"required":["topic"],"title":"TableDefinition","type":"object"},"TableDefinitionSource":{"additionalProperties":false,"description":"Contains a definition of a Table, which can be referenced by producers and pipelines","properties":{"keyType":{"description":"The key type of the table","type":"string"},"offsetResetPolicy":{"description":"*(optional)* Policy that determines what to do when there is no initial offset in Kafka, or if the current offset does not exist any more on the server (e.g. because that data has been deleted)","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* KeyValue state store definition"},"timestampExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TimestampExtractorDefinitionWithImplicitType"}],"description":"*(optional)* A function extracts the event time from a consumed record"},"topic":{"description":"The name of the Kafka topic for this table","type":"string"},"valueType":{"description":"The value type of the table","type":"string"}},"required":["topic","keyType","valueType"],"title":"TableDefinitionSource","type":"object"},"TimestampExtractorDefinition":{"additionalProperties":false,"description":"Defines a timestamp extractor function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the timestamp extractor"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the timestamp extractor. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the timestamp extractor. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the timestamp extractor. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the timestamp extractor","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the timestamp extractor. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the timestamp extractor uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["timestampExtractor"]}},"required":["type"],"title":"TimestampExtractorDefinition","type":"object"},"TimestampExtractorDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a timestamp extractor function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the timestamp extractor"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the timestamp extractor. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the timestamp extractor. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the timestamp extractor. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the timestamp extractor","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the timestamp extractor. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the timestamp extractor uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"TimestampExtractorDefinitionWithImplicitType","type":"object"},"ToStreamOperation":{"additionalProperties":false,"description":"Convert a Table into a Stream, optionally through a custom key transformer","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyTransformerDefinitionWithImplicitType"}],"description":"*(optional)* A function that computes the output key for every record"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["toStream"]}},"required":["type"],"title":"ToStreamOperation","type":"object"},"ToTableOperation":{"additionalProperties":false,"description":"Convert a Stream into a Table","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the result table"},"type":{"description":"The type of the operation","enum":["toTable"]}},"required":["type"],"title":"ToTableOperation","type":"object"},"ToTopicDefinition":{"additionalProperties":false,"description":"Writes out pipeline messages to a topic","properties":{"keyType":{"description":"*(optional)* The key type of the topic","type":"string"},"partitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions the records in the output topic"},"topic":{"description":"The name of the Kafka topic","type":"string"},"valueType":{"description":"*(optional)* The value type of the topic","type":"string"}},"required":["topic"],"title":"ToTopicDefinition","type":"object"},"ToTopicNameExtractorDefinition":{"additionalProperties":false,"description":"Writes out pipeline messages to a topic as given by a topic name extractor","properties":{"partitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions the records in the output topic"},"topicNameExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TopicNameExtractorDefinitionWithImplicitType"}],"description":"Reference to a pre-defined topic name extractor, or an inline definition of a topic name extractor"}},"required":["topicNameExtractor"],"title":"ToTopicNameExtractorDefinition","type":"object"},"TopicDefinition":{"additionalProperties":false,"description":"Contains a definition of a Kafka topic, to be used by producers and pipelines","properties":{"keyType":{"description":"*(optional)* The key type of the topic","type":"string"},"topic":{"description":"The name of the Kafka topic","type":"string"},"valueType":{"description":"*(optional)* The value type of the topic","type":"string"}},"required":["topic"],"title":"TopicDefinition","type":"object"},"TopicDefinitionSource":{"additionalProperties":false,"description":"Contains a definition of a Kafka topic, to be used by producers and pipelines","properties":{"keyType":{"description":"The key type of the topic","type":"string"},"offsetResetPolicy":{"description":"*(optional)* Policy that determines what to do when there is no initial offset in Kafka, or if the current offset does not exist any more on the server (e.g. because that data has been deleted)","type":"string"},"timestampExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TimestampExtractorDefinitionWithImplicitType"}],"description":"*(optional)* A function extracts the event time from a consumed record"},"topic":{"description":"The name of the Kafka topic","type":"string"},"valueType":{"description":"The value type of the topic","type":"string"}},"required":["topic","keyType","valueType"],"title":"TopicDefinitionSource","type":"object"},"TopicNameExtractorDefinition":{"additionalProperties":false,"description":"Defines a topic name extractor function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the topic name extractor"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the topic name extractor. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the topic name extractor. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the topic name extractor. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the topic name extractor","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the topic name extractor. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the topic name extractor uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["topicNameExtractor"]}},"required":["type"],"title":"TopicNameExtractorDefinition","type":"object"},"TopicNameExtractorDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a topic name extractor function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the topic name extractor"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the topic name extractor. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the topic name extractor. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the topic name extractor. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the topic name extractor","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the topic name extractor. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the topic name extractor uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"TopicNameExtractorDefinitionWithImplicitType","type":"object"},"TransformKeyOperation":{"additionalProperties":false,"description":"Convert the key of every record in the stream to another key","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyTransformerDefinitionWithImplicitType"}],"description":"A function that computes a new key for each record"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"stores":{"description":"*(optional)* The names of all state stores used by the function","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the operation","enum":["transformKey","mapKey","selectKey"]}},"required":["mapper","type"],"title":"TransformKeyOperation","type":"object"},"TransformKeyValueOperation":{"additionalProperties":false,"description":"Convert the key/value of every record in the stream to another key/value","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueTransformerDefinitionWithImplicitType"}],"description":"A function that computes a new key/value for each record"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"stores":{"description":"*(optional)* The names of all state stores used by the function","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the operation","enum":["mapKeyValue","map","transformKeyValue"]}},"required":["mapper","type"],"title":"TransformKeyValueOperation","type":"object"},"TransformKeyValueToKeyValueListOperation":{"additionalProperties":false,"description":"Convert a stream by transforming every record into a list of derived records","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueToKeyValueListTransformerDefinitionWithImplicitType"}],"description":"A function that converts every record of a stream to a list of output records."},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"stores":{"description":"*(optional)* The names of all state stores used by the function","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the operation","enum":["transformKeyValueToKeyValueList","flatMap"]}},"required":["mapper","type"],"title":"TransformKeyValueToKeyValueListOperation","type":"object"},"TransformKeyValueToValueListOperation":{"additionalProperties":false,"description":"Convert every record in the stream to a list of output records with the same key","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueToValueListTransformerDefinitionWithImplicitType"}],"description":"A function that converts every key/value into a list of result values, each of which will be combined with the original key to form a new message in the output stream"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"stores":{"description":"*(optional)* The names of all state stores used by the function","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the operation","enum":["transformKeyValueToValueList","flatMapValues"]}},"required":["mapper","type"],"title":"TransformKeyValueToValueListOperation","type":"object"},"TransformMetadataOperation":{"additionalProperties":false,"description":"Convert the metadata of every record in the stream","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/MetadataTransformerDefinitionWithImplicitType"}],"description":"A function that converts the metadata (Kafka headers, timestamp) of every record in the stream"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"stores":{"description":"*(optional)* The names of all state stores used by the function","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the operation","enum":["transformMetadata"]}},"required":["mapper","type"],"title":"TransformMetadataOperation","type":"object"},"TransformValueOperation":{"additionalProperties":false,"description":"Convert the value of every record in the stream to another value","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueTransformerDefinitionWithImplicitType"}],"description":"A function that converts the value of every record into another value"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the transformed table (only applies to tables, ignored for streams)"},"stores":{"description":"*(optional)* The names of all state stores used by the function","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the operation","enum":["mapValue","transformValue","mapValues"]}},"required":["mapper","type"],"title":"TransformValueOperation","type":"object"},"ValueJoinerDefinition":{"additionalProperties":false,"description":"Defines a value joiner function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the value joiner"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the value joiner. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the value joiner. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the value joiner. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the value joiner","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the value joiner. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the value joiner uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["valueJoiner"]}},"required":["type"],"title":"ValueJoinerDefinition","type":"object"},"ValueJoinerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a value joiner function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the value joiner"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the value joiner. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the value joiner. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the value joiner. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the value joiner","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the value joiner. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the value joiner uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"ValueJoinerDefinitionWithImplicitType","type":"object"},"ValueTransformerDefinition":{"additionalProperties":false,"description":"Defines a value transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the value transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the value transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the value transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the value transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the value transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the value transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the value transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["valueTransformer"]}},"required":["type"],"title":"ValueTransformerDefinition","type":"object"},"ValueTransformerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a value transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the value transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the value transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the value transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the value transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the value transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the value transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the value transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"ValueTransformerDefinitionWithImplicitType","type":"object"},"WindowBySessionOperation":{"additionalProperties":false,"description":"Operation to window messages by session, configured by an inactivity gap","properties":{"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* (Tumbling, Hopping) The grace period, during which out-of-order records can still be processed"},"inactivityGap":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The inactivity gap, below which two messages are considered to be of the same session"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["windowBySession"]}},"required":["inactivityGap","type"],"title":"WindowBySessionOperation","type":"object"},"WindowByTimeOperationWithHoppingWindow":{"additionalProperties":false,"description":"Operation to window records based on time criteria","properties":{"advanceBy":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The amount of time to increase time windows by"},"duration":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The duration of time windows"},"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The grace period, during which out-of-order records can still be processed"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["windowByTime"]},"windowType":{"description":"The windowType of the time window","enum":["hopping"]}},"required":["duration","advanceBy","windowType","type"],"title":"WindowByTimeOperationWithHoppingWindow","type":"object"},"WindowByTimeOperationWithSlidingWindow":{"additionalProperties":false,"description":"Operation to window records based on time criteria","properties":{"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The grace period, during which out-of-order records can still be processed"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"timeDifference":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The maximum amount of time difference between two records"},"type":{"description":"The type of the operation","enum":["windowByTime"]},"windowType":{"description":"The windowType of the time window","enum":["sliding"]}},"required":["timeDifference","windowType","type"],"title":"WindowByTimeOperationWithSlidingWindow","type":"object"},"WindowByTimeOperationWithTumblingWindow":{"additionalProperties":false,"description":"Operation to window records based on time criteria","properties":{"duration":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The duration of time windows"},"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The grace period, during which out-of-order records can still be processed"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["windowByTime"]},"windowType":{"description":"The windowType of the time window","enum":["tumbling"]}},"required":["duration","windowType","type"],"title":"WindowByTimeOperationWithTumblingWindow","type":"object"},"WindowStateStoreDefinition":{"additionalProperties":false,"description":"Definition of a window state store","properties":{"caching":{"description":"*(optional)* \"true\" if changed to the window store need to be buffered and periodically released, \"false\" to emit all changes directly","type":"boolean"},"keyType":{"description":"*(optional)* The key type of the window store","type":"string"},"logging":{"description":"*(optional)* \"true\" if a changelog topic should be set up on Kafka for this window store, \"false\" otherwise","type":"boolean"},"name":{"description":"*(optional)* The name of the window store. If this field is not defined, then the name is derived from the context.","type":"string"},"persistent":{"description":"*(optional)* \"true\" if this window store needs to be stored on disk, \"false\" otherwise","type":"boolean"},"retainDuplicates":{"description":"*(optional)* Whether or not to retain duplicates","type":"boolean"},"retention":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The duration for which elements in the window store are retained"},"timestamped":{"description":"*(optional)* \"true\" if elements in the store are timestamped, \"false\" otherwise","type":"boolean"},"type":{"description":"The type of the state store","enum":["window"]},"valueType":{"description":"*(optional)* The value type of the window store","type":"string"},"windowSize":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* Size of the windows (cannot be negative)"}},"required":["type"],"title":"WindowStateStoreDefinition","type":"object"},"WindowStateStoreDefinitionWithImplicitType":{"additionalProperties":false,"description":"Definition of a window state store","properties":{"caching":{"description":"*(optional)* \"true\" if changed to the window store need to be buffered and periodically released, \"false\" to emit all changes directly","type":"boolean"},"keyType":{"description":"*(optional)* The key type of the window store","type":"string"},"logging":{"description":"*(optional)* \"true\" if a changelog topic should be set up on Kafka for this window store, \"false\" otherwise","type":"boolean"},"name":{"description":"*(optional)* The name of the window store. If this field is not defined, then the name is derived from the context.","type":"string"},"persistent":{"description":"*(optional)* \"true\" if this window store needs to be stored on disk, \"false\" otherwise","type":"boolean"},"retainDuplicates":{"description":"*(optional)* Whether or not to retain duplicates","type":"boolean"},"retention":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The duration for which elements in the window store are retained"},"timestamped":{"description":"*(optional)* \"true\" if elements in the store are timestamped, \"false\" otherwise","type":"boolean"},"type":{"description":"The type of the state store","enum":["window"]},"valueType":{"description":"*(optional)* The value type of the window store","type":"string"},"windowSize":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* Size of the windows (cannot be negative)"}},"title":"WindowStateStoreDefinitionWithImplicitType","type":"object"}},"description":"KSML definition","properties":{"functions":{"description":"*(optional)* Functions that can be referenced in producers and pipelines","patternProperties":{"^[a-zA-Z0-9_]+$":{"anyOf":[{"$ref":"#/definitions/AggregatorDefinition"},{"$ref":"#/definitions/ForEachActionDefinition"},{"$ref":"#/definitions/ForeignKeyExtractorDefinition"},{"$ref":"#/definitions/GeneratorDefinition"},{"$ref":"#/definitions/GenericFunctionDefinitionWithImplicitType"},{"$ref":"#/definitions/InitializerDefinition"},{"$ref":"#/definitions/KeyTransformerDefinition"},{"$ref":"#/definitions/KeyValueMapperDefinition"},{"$ref":"#/definitions/KeyValuePrinterDefinition"},{"$ref":"#/definitions/KeyValueToKeyValueListTransformerDefinition"},{"$ref":"#/definitions/KeyValueToValueListTransformerDefinition"},{"$ref":"#/definitions/KeyValueTransformerDefinition"},{"$ref":"#/definitions/MergerDefinition"},{"$ref":"#/definitions/MetadataTransformerDefinition"},{"$ref":"#/definitions/PredicateDefinition"},{"$ref":"#/definitions/ReducerDefinition"},{"$ref":"#/definitions/StreamPartitionerDefinition"},{"$ref":"#/definitions/TimestampExtractorDefinition"},{"$ref":"#/definitions/TopicNameExtractorDefinition"},{"$ref":"#/definitions/ValueJoinerDefinition"},{"$ref":"#/definitions/ValueTransformerDefinition"}]}},"type":"object"},"globalTables":{"description":"*(optional)* GlobalTables that can be referenced in producers and pipelines","patternProperties":{"^[a-zA-Z0-9_]+$":{"$ref":"#/definitions/GlobalTableDefinitionSource"}},"type":"object"},"pipelines":{"description":"*(optional)* Collection of named pipelines","patternProperties":{"^[a-zA-Z0-9_]+$":{"$ref":"#/definitions/PipelineDefinition"}},"type":"object"},"producers":{"description":"*(optional)* Collection of named producers","patternProperties":{"^[a-zA-Z0-9_]+$":{"$ref":"#/definitions/ProducerDefinition"}},"type":"object"},"stores":{"description":"*(optional)* State stores that can be referenced in producers and pipelines","patternProperties":{"^[a-zA-Z0-9_]+$":{"anyOf":[{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}]}},"type":"object"},"streams":{"description":"*(optional)* Streams that can be referenced in producers and pipelines","patternProperties":{"^[a-zA-Z0-9_]+$":{"$ref":"#/definitions/StreamDefinitionSource"}},"type":"object"},"tables":{"description":"*(optional)* Tables that can be referenced in producers and pipelines","patternProperties":{"^[a-zA-Z0-9_]+$":{"$ref":"#/definitions/TableDefinitionSource"}},"type":"object"}},"title":"TopologyDefinition","type":"object"} +{"additionalProperties":false,"definitions":{"AggregateOperation":{"additionalProperties":false,"description":"An aggregate operation","properties":{"adder":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/AggregatorDefinitionWithImplicitType"}],"description":"*(optional)* (GroupedTable) A function that adds a record to the aggregation result"},"aggregator":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/AggregatorDefinitionWithImplicitType"}],"description":"*(optional)* (GroupedStream, SessionWindowedStream, TimeWindowedStream) The aggregator function, which combines a value with the previous aggregation result and outputs a new aggregation result"},"initializer":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/InitializerDefinitionWithImplicitType"}],"description":"The initializer function, which generates an initial value for every set of aggregated records"},"merger":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/MergerDefinitionWithImplicitType"}],"description":"*(optional)* (SessionWindowedStream, SessionWindowedCogroupedStream) A function that combines two aggregation results"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/WindowStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the result aggregation"},"subtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/AggregatorDefinitionWithImplicitType"}],"description":"*(optional)* (GroupedTable) A function that removes a record from the aggregation result"},"type":{"description":"The type of the operation","enum":["aggregate"]}},"required":["initializer","type"],"title":"AggregateOperation","type":"object"},"AggregatorDefinition":{"additionalProperties":false,"description":"Defines a aggregator function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the aggregator"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the aggregator. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the aggregator. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the aggregator. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the aggregator","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the aggregator. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the aggregator uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["aggregator"]}},"required":["type"],"title":"AggregatorDefinition","type":"object"},"AggregatorDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a aggregator function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the aggregator"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the aggregator. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the aggregator. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the aggregator. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the aggregator","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the aggregator. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the aggregator uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"AggregatorDefinitionWithImplicitType","type":"object"},"BranchDefinitionWithPipeline":{"additionalProperties":false,"description":"Defines a branch with sub-pipeline in a BranchOperation","properties":{"as":{"description":"*(optional)* The name to register the pipeline result under, which can be used as source by follow-up pipelines","type":"string"},"branch":{"description":"*(optional)* Defines a single branch, consisting of a condition and a pipeline to execute for messages that fulfil the predicate","items":{"$ref":"#/definitions/StringOrInlinePredicateDefinitionWithImplicitType"},"type":"array"},"forEach":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ForEachActionDefinitionWithImplicitType"}],"description":"*(optional)* A function that gets called for every message in the stream"},"if":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/PredicateDefinitionWithImplicitType"}],"description":"*(optional)* Defines the condition under which messages get sent down this branch"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"print":{"$ref":"#/definitions/PrintOperation","description":"*(optional)* The specification of where to print messages to"},"to":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ToTopicDefinition"}],"description":"*(optional)* Ends the pipeline by sending all messages to a stream, table or globalTable, or to an inline defined output topic and optional partitioner"},"toTopicNameExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ToTopicNameExtractorDefinition"}],"description":"*(optional)* Ends the pipeline by sending all messages to a topic provided by a pre-defined topic name extractor function, or to a topic provided by an inline defined topic name extractor and optional partitioner"},"via":{"description":"*(optional)* A series of operations performed on the input stream","items":{"anyOf":[{"$ref":"#/definitions/AggregateOperation"},{"$ref":"#/definitions/CogroupOperation"},{"$ref":"#/definitions/ConvertKeyOperation"},{"$ref":"#/definitions/ConvertKeyValueOperation"},{"$ref":"#/definitions/ConvertValueOperation"},{"$ref":"#/definitions/CountOperation"},{"$ref":"#/definitions/FilterNotOperation"},{"$ref":"#/definitions/FilterOperation"},{"$ref":"#/definitions/GroupByKeyOperation"},{"$ref":"#/definitions/GroupByOperation"},{"$ref":"#/definitions/JoinOperationWithGlobalTable"},{"$ref":"#/definitions/JoinOperationWithStream"},{"$ref":"#/definitions/JoinOperationWithTable"},{"$ref":"#/definitions/LeftJoinOperationWithGlobalTable"},{"$ref":"#/definitions/LeftJoinOperationWithStream"},{"$ref":"#/definitions/LeftJoinOperationWithTable"},{"$ref":"#/definitions/MergeOperation"},{"$ref":"#/definitions/OuterJoinOperationWithStream"},{"$ref":"#/definitions/OuterJoinOperationWithTable"},{"$ref":"#/definitions/PeekOperation"},{"$ref":"#/definitions/ReduceOperationWithAdderAndSubtractor"},{"$ref":"#/definitions/ReduceOperationWithReducer"},{"$ref":"#/definitions/RepartitionOperation"},{"$ref":"#/definitions/SuppressOperationUntilTimeLimit"},{"$ref":"#/definitions/SuppressOperationUntilWindowCloses"},{"$ref":"#/definitions/ToStreamOperation"},{"$ref":"#/definitions/ToTableOperation"},{"$ref":"#/definitions/TransformKeyOperation"},{"$ref":"#/definitions/TransformKeyValueOperation"},{"$ref":"#/definitions/TransformKeyValueToKeyValueListOperation"},{"$ref":"#/definitions/TransformKeyValueToValueListOperation"},{"$ref":"#/definitions/TransformMetadataOperation"},{"$ref":"#/definitions/TransformValueOperation"},{"$ref":"#/definitions/WindowBySessionOperation"},{"$ref":"#/definitions/WindowByTimeOperationWithHoppingWindow"},{"$ref":"#/definitions/WindowByTimeOperationWithSlidingWindow"},{"$ref":"#/definitions/WindowByTimeOperationWithTumblingWindow"}]},"type":"array"}},"title":"BranchDefinitionWithPipeline","type":"object"},"CogroupOperation":{"additionalProperties":false,"description":"A cogroup operation","properties":{"aggregator":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/AggregatorDefinitionWithImplicitType"}],"description":"(GroupedStream, SessionWindowedStream, TimeWindowedStream) The aggregator function, which combines a value with the previous aggregation result and outputs a new aggregation result"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/WindowStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the co-grouped stream"},"type":{"description":"The type of the operation","enum":["cogroup"]}},"required":["aggregator","type"],"title":"CogroupOperation","type":"object"},"ConvertKeyOperation":{"additionalProperties":false,"description":"An operation to convert the stream key type to another type. Conversion is only syntactic, eg. from Avro to XML.","properties":{"into":{"description":"The type to convert the stream key into","type":"string"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["convertKey"]}},"required":["into","type"],"title":"ConvertKeyOperation","type":"object"},"ConvertKeyValueOperation":{"additionalProperties":false,"description":"An operation to convert the stream key and value types to other types. Conversion is only syntactic, eg. from Avro to XML.","properties":{"into":{"description":"The tuple type to convert the stream key/value into","type":"string"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["convertKeyValue"]}},"required":["into","type"],"title":"ConvertKeyValueOperation","type":"object"},"ConvertValueOperation":{"additionalProperties":false,"description":"An operation to convert the stream value type to another type. Conversion is only syntactic, eg. from Avro to XML.","properties":{"into":{"description":"The type to convert the stream value into","type":"string"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["convertValue"]}},"required":["into","type"],"title":"ConvertValueOperation","type":"object"},"CountOperation":{"additionalProperties":false,"description":"Count the number of times a key is seen in a given window","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the count operation's result"},"type":{"description":"The type of the operation","enum":["count"]}},"required":["type"],"title":"CountOperation","type":"object"},"FilterNotOperation":{"additionalProperties":false,"description":"Filter records based on the inverse result of a predicate function","properties":{"if":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/PredicateDefinitionWithImplicitType"}],"description":"A function that returns \"false\" when records are accepted, \"true\" otherwise"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the filtered table (only applies to tables, ignored for streams)"},"type":{"description":"The type of the operation","enum":["filterNot"]}},"required":["if","type"],"title":"FilterNotOperation","type":"object"},"FilterOperation":{"additionalProperties":false,"description":"Filter records based on a predicate function","properties":{"if":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/PredicateDefinitionWithImplicitType"}],"description":"A function that returns \"true\" when records are accepted, \"false\" otherwise"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the filtered table (only applies to tables, ignored for streams)"},"type":{"description":"The type of the operation","enum":["filter"]}},"required":["if","type"],"title":"FilterOperation","type":"object"},"ForEachActionDefinition":{"additionalProperties":false,"description":"Defines a foreach action function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the foreach action"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the foreach action. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the foreach action. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the foreach action. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the foreach action","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the foreach action. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the foreach action uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["forEach"]}},"required":["type"],"title":"ForEachActionDefinition","type":"object"},"ForEachActionDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a foreach action function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the foreach action"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the foreach action. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the foreach action. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the foreach action. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the foreach action","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the foreach action. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the foreach action uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"ForEachActionDefinitionWithImplicitType","type":"object"},"ForeignKeyExtractorDefinition":{"additionalProperties":false,"description":"Defines a foreign key extractor function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the foreign key extractor"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the foreign key extractor. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the foreign key extractor. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the foreign key extractor. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the foreign key extractor","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the foreign key extractor. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the foreign key extractor uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["foreignKeyExtractor"]}},"required":["type"],"title":"ForeignKeyExtractorDefinition","type":"object"},"GeneratorDefinition":{"additionalProperties":false,"description":"Defines a message generator function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the message generator"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the message generator. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the message generator. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the message generator. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the message generator","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the message generator. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the message generator uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["generator"]}},"required":["type"],"title":"GeneratorDefinition","type":"object"},"GeneratorDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a message generator function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the message generator"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the message generator. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the message generator. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the message generator. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the message generator","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the message generator. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the message generator uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"GeneratorDefinitionWithImplicitType","type":"object"},"GenericFunctionDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a generic function function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the generic function"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the generic function. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the generic function. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the generic function. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the generic function","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the generic function. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the generic function uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["generic"]}},"title":"GenericFunctionDefinitionWithImplicitType","type":"object"},"GlobalTableDefinition":{"additionalProperties":false,"description":"Contains a definition of a GlobalTable, which can be referenced by producers and pipelines","properties":{"keyType":{"description":"*(optional)* The key type of the global table","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* KeyValue state store definition"},"topic":{"description":"The name of the Kafka topic for this global table","type":"string"},"valueType":{"description":"*(optional)* The value type of the global table","type":"string"}},"required":["topic"],"title":"GlobalTableDefinition","type":"object"},"GlobalTableDefinitionSource":{"additionalProperties":false,"description":"Contains a definition of a GlobalTable, which can be referenced by producers and pipelines","properties":{"keyType":{"description":"The key type of the global table","type":"string"},"offsetResetPolicy":{"description":"*(optional)* Policy that determines what to do when there is no initial offset in Kafka, or if the current offset does not exist any more on the server (e.g. because that data has been deleted)","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* KeyValue state store definition"},"timestampExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TimestampExtractorDefinitionWithImplicitType"}],"description":"*(optional)* A function extracts the event time from a consumed record"},"topic":{"description":"The name of the Kafka topic for this global table","type":"string"},"valueType":{"description":"The value type of the global table","type":"string"}},"required":["topic","keyType","valueType"],"title":"GlobalTableDefinitionSource","type":"object"},"GroupByKeyOperation":{"additionalProperties":false,"description":"Operation to group all messages with the same key together","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the grouped stream"},"type":{"description":"The type of the operation","enum":["groupByKey"]}},"required":["type"],"title":"GroupByKeyOperation","type":"object"},"GroupByOperation":{"additionalProperties":false,"description":"Operation to group all messages with together based on a keying function","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueMapperDefinitionWithImplicitType"}],"description":"Function to map records to a key they can be grouped on"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the grouped stream or table"},"type":{"description":"The type of the operation","enum":["groupBy"]}},"required":["mapper","type"],"title":"GroupByOperation","type":"object"},"InitializerDefinition":{"additionalProperties":false,"description":"Defines a initializer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the initializer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the initializer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the initializer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the initializer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the initializer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the initializer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the initializer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["initializer"]}},"required":["type"],"title":"InitializerDefinition","type":"object"},"InitializerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a initializer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the initializer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the initializer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the initializer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the initializer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the initializer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the initializer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the initializer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"InitializerDefinitionWithImplicitType","type":"object"},"JoinOperationWithGlobalTable":{"additionalProperties":false,"description":"Operation to join with a table","properties":{"globalTable":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/GlobalTableDefinition"}],"description":"A reference to the globalTable, or an inline definition of the globalTable to join with"},"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that maps the key value from the stream to the primary key type of the globalTable"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["join"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["globalTable","mapper","valueJoiner","type"],"title":"JoinOperationWithGlobalTable","type":"object"},"JoinOperationWithStream":{"additionalProperties":false,"description":"Operation to join with a stream","properties":{"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The window grace period (the time to admit out-of-order events after the end of the window)"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the joined streams"},"stream":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamDefinition"}],"description":"A reference to the Stream, or an inline definition of the stream to join with"},"timeDifference":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The maximum time difference for a join over two streams on the same key"},"type":{"description":"The type of the operation","enum":["join"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["stream","valueJoiner","timeDifference","type"],"title":"JoinOperationWithStream","type":"object"},"JoinOperationWithTable":{"additionalProperties":false,"description":"Operation to join with a table","properties":{"foreignKeyExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"*(optional)* A function that can translate the join table value to a primary key"},"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The window grace period (the time to admit out-of-order events after the end of the window)"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"otherPartitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions the records on the join table"},"partitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions the records on the primary table"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the joined streams"},"table":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TableDefinition"}],"description":"A reference to the table, or an inline definition of the table to join with"},"type":{"description":"The type of the operation","enum":["join"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["table","valueJoiner","type"],"title":"JoinOperationWithTable","type":"object"},"KeyTransformerDefinition":{"additionalProperties":false,"description":"Defines a key transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the key transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the key transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the key transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the key transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the key transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the key transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the key transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["keyTransformer"]}},"required":["type"],"title":"KeyTransformerDefinition","type":"object"},"KeyTransformerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a key transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the key transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the key transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the key transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the key transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the key transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the key transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the key transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"KeyTransformerDefinitionWithImplicitType","type":"object"},"KeyValueMapperDefinition":{"additionalProperties":false,"description":"Defines a keyvalue mapper function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue mapper"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue mapper. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue mapper. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue mapper. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue mapper","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue mapper. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue mapper uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["keyValueMapper"]}},"required":["type"],"title":"KeyValueMapperDefinition","type":"object"},"KeyValueMapperDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a keyvalue mapper function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue mapper"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue mapper. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue mapper. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue mapper. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue mapper","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue mapper. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue mapper uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"KeyValueMapperDefinitionWithImplicitType","type":"object"},"KeyValuePrinterDefinition":{"additionalProperties":false,"description":"Defines a keyvalue printer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue printer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue printer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue printer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue printer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue printer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue printer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue printer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["keyValuePrinter"]}},"required":["type"],"title":"KeyValuePrinterDefinition","type":"object"},"KeyValuePrinterDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a keyvalue printer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue printer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue printer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue printer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue printer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue printer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue printer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue printer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"KeyValuePrinterDefinitionWithImplicitType","type":"object"},"KeyValueStateStoreDefinition":{"additionalProperties":false,"description":"Definition of a keyValue state store","properties":{"caching":{"description":"*(optional)* \"true\" if changed to the keyValue store need to be buffered and periodically released, \"false\" to emit all changes directly","type":"boolean"},"historyRetention":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* (Versioned only) The duration for which old record versions are available for query (cannot be negative)"},"keyType":{"description":"*(optional)* The key type of the keyValue store","type":"string"},"logging":{"description":"*(optional)* \"true\" if a changelog topic should be set up on Kafka for this keyValue store, \"false\" otherwise","type":"boolean"},"name":{"description":"*(optional)* The name of the keyValue store. If this field is not defined, then the name is derived from the context.","type":"string"},"persistent":{"description":"*(optional)* \"true\" if this keyValue store needs to be stored on disk, \"false\" otherwise","type":"boolean"},"segmentInterval":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* Size of segments for storing old record versions (must be positive). Old record versions for the same key in a single segment are stored (updated and accessed) together. The only impact of this parameter is performance. If segments are large and a workload results in many record versions for the same key being collected in a single segment, performance may degrade as a result. On the other hand, historical reads (which access older segments) and out-of-order writes may slow down if there are too many segments."},"timestamped":{"description":"*(optional)* \"true\" if elements in the store are timestamped, \"false\" otherwise","type":"boolean"},"type":{"description":"The type of the state store","enum":["keyValue"]},"valueType":{"description":"*(optional)* The value type of the keyValue store","type":"string"},"versioned":{"description":"*(optional)* \"true\" if elements in the store are versioned, \"false\" otherwise","type":"boolean"}},"required":["type"],"title":"KeyValueStateStoreDefinition","type":"object"},"KeyValueStateStoreDefinitionWithImplicitType":{"additionalProperties":false,"description":"Definition of a keyValue state store","properties":{"caching":{"description":"*(optional)* \"true\" if changed to the keyValue store need to be buffered and periodically released, \"false\" to emit all changes directly","type":"boolean"},"historyRetention":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* (Versioned only) The duration for which old record versions are available for query (cannot be negative)"},"keyType":{"description":"*(optional)* The key type of the keyValue store","type":"string"},"logging":{"description":"*(optional)* \"true\" if a changelog topic should be set up on Kafka for this keyValue store, \"false\" otherwise","type":"boolean"},"name":{"description":"*(optional)* The name of the keyValue store. If this field is not defined, then the name is derived from the context.","type":"string"},"persistent":{"description":"*(optional)* \"true\" if this keyValue store needs to be stored on disk, \"false\" otherwise","type":"boolean"},"segmentInterval":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* Size of segments for storing old record versions (must be positive). Old record versions for the same key in a single segment are stored (updated and accessed) together. The only impact of this parameter is performance. If segments are large and a workload results in many record versions for the same key being collected in a single segment, performance may degrade as a result. On the other hand, historical reads (which access older segments) and out-of-order writes may slow down if there are too many segments."},"timestamped":{"description":"*(optional)* \"true\" if elements in the store are timestamped, \"false\" otherwise","type":"boolean"},"type":{"description":"The type of the state store","enum":["keyValue"]},"valueType":{"description":"*(optional)* The value type of the keyValue store","type":"string"},"versioned":{"description":"*(optional)* \"true\" if elements in the store are versioned, \"false\" otherwise","type":"boolean"}},"title":"KeyValueStateStoreDefinitionWithImplicitType","type":"object"},"KeyValueToKeyValueListTransformerDefinition":{"additionalProperties":false,"description":"Defines a keyvalue-to-keyvaluelist transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue-to-keyvaluelist transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue-to-keyvaluelist transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue-to-keyvaluelist transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue-to-keyvaluelist transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue-to-keyvaluelist transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue-to-keyvaluelist transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue-to-keyvaluelist transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["keyValueToKeyValueListTransformer"]}},"required":["type"],"title":"KeyValueToKeyValueListTransformerDefinition","type":"object"},"KeyValueToKeyValueListTransformerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a keyvalue-to-keyvaluelist transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue-to-keyvaluelist transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue-to-keyvaluelist transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue-to-keyvaluelist transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue-to-keyvaluelist transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue-to-keyvaluelist transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue-to-keyvaluelist transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue-to-keyvaluelist transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"KeyValueToKeyValueListTransformerDefinitionWithImplicitType","type":"object"},"KeyValueToValueListTransformerDefinition":{"additionalProperties":false,"description":"Defines a keyvalue-to-valuelist transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue-to-valuelist transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue-to-valuelist transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue-to-valuelist transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue-to-valuelist transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue-to-valuelist transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue-to-valuelist transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue-to-valuelist transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["keyValueToValueListTransformer"]}},"required":["type"],"title":"KeyValueToValueListTransformerDefinition","type":"object"},"KeyValueToValueListTransformerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a keyvalue-to-valuelist transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue-to-valuelist transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue-to-valuelist transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue-to-valuelist transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue-to-valuelist transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue-to-valuelist transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue-to-valuelist transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue-to-valuelist transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"KeyValueToValueListTransformerDefinitionWithImplicitType","type":"object"},"KeyValueTransformerDefinition":{"additionalProperties":false,"description":"Defines a keyvalue transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["keyValueTransformer"]}},"required":["type"],"title":"KeyValueTransformerDefinition","type":"object"},"KeyValueTransformerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a keyvalue transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the keyvalue transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the keyvalue transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the keyvalue transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the keyvalue transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the keyvalue transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the keyvalue transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the keyvalue transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"KeyValueTransformerDefinitionWithImplicitType","type":"object"},"LeftJoinOperationWithGlobalTable":{"additionalProperties":false,"description":"Operation to leftJoin with a globalTable","properties":{"globalTable":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/GlobalTableDefinition"}],"description":"A reference to the globalTable, or an inline definition of the globalTable to join with"},"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that maps the key value from the stream with the primary key of the globalTable"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["leftJoin"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["globalTable","mapper","valueJoiner","type"],"title":"LeftJoinOperationWithGlobalTable","type":"object"},"LeftJoinOperationWithStream":{"additionalProperties":false,"description":"Operation to leftJoin with a stream","properties":{"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The window grace period (the time to admit out-of-order events after the end of the window)"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the joined streams"},"stream":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamDefinition"}],"description":"A reference to the stream, or an inline definition of the stream to leftJoin with"},"timeDifference":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The maximum time difference for a leftJoin over two streams on the same key"},"type":{"description":"The type of the operation","enum":["leftJoin"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["stream","valueJoiner","timeDifference","type"],"title":"LeftJoinOperationWithStream","type":"object"},"LeftJoinOperationWithTable":{"additionalProperties":false,"description":"Operation to leftJoin with a table","properties":{"foreignKeyExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"*(optional)* A function that can translate the join table value to a primary key"},"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The window grace period (the time to admit out-of-order events after the end of the window)"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"otherPartitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions the records on the join table"},"partitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions the records on the primary table"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the joined streams"},"table":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TableDefinition"}],"description":"A reference to the Table, or an inline definition of the Table to join with"},"type":{"description":"The type of the operation","enum":["leftJoin"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["table","valueJoiner","type"],"title":"LeftJoinOperationWithTable","type":"object"},"MergeOperation":{"additionalProperties":false,"description":"A merge operation to join two Streams","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"stream":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamDefinitionSource"}],"description":"The stream to merge with"},"type":{"description":"The type of the operation","enum":["merge"]}},"required":["stream","type"],"title":"MergeOperation","type":"object"},"MergerDefinition":{"additionalProperties":false,"description":"Defines a merger function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the merger"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the merger. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the merger. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the merger. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the merger","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the merger. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the merger uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["merger"]}},"required":["type"],"title":"MergerDefinition","type":"object"},"MergerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a merger function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the merger"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the merger. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the merger. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the merger. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the merger","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the merger. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the merger uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"MergerDefinitionWithImplicitType","type":"object"},"MetadataTransformerDefinition":{"additionalProperties":false,"description":"Defines a metadata transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the metadata transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the metadata transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the metadata transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the metadata transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the metadata transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the metadata transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the metadata transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["metadataTransformer"]}},"required":["type"],"title":"MetadataTransformerDefinition","type":"object"},"MetadataTransformerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a metadata transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the metadata transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the metadata transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the metadata transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the metadata transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the metadata transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the metadata transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the metadata transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"MetadataTransformerDefinitionWithImplicitType","type":"object"},"OuterJoinOperationWithStream":{"additionalProperties":false,"description":"Operation to outerJoin with a stream","properties":{"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The window grace period (the time to admit out-of-order events after the end of the window)"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the outerJoined streams"},"stream":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamDefinition"}],"description":"A reference to the stream, or an inline definition of the stream to outerJoin with"},"timeDifference":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The maximum time difference for an outerJoin over two streams on the same key"},"type":{"description":"The type of the operation","enum":["outerJoin"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["stream","valueJoiner","timeDifference","type"],"title":"OuterJoinOperationWithStream","type":"object"},"OuterJoinOperationWithTable":{"additionalProperties":false,"description":"Operation to outerJoin with a table","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}],"description":"*(optional)* Materialized view of the outerJoined streams"},"table":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TableDefinition"}],"description":"A reference to the table, or an inline definition of the table to outerJoin with"},"type":{"description":"The type of the operation","enum":["outerJoin"]},"valueJoiner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueJoinerDefinitionWithImplicitType"}],"description":"A function that joins two values"}},"required":["table","valueJoiner","type"],"title":"OuterJoinOperationWithTable","type":"object"},"ParameterDefinition":{"additionalProperties":false,"description":"Defines a parameter for a user function","properties":{"defaultValue":{"description":"*(optional)* The default value for the parameter","type":"string"},"name":{"description":"The name of the parameter","type":"string"},"type":{"description":"The type of the parameter","type":"string"}},"required":["name","type"],"title":"ParameterDefinition","type":"object"},"PeekOperation":{"additionalProperties":false,"description":"Operation to peek into a stream, without modifying the stream contents","properties":{"forEach":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ForEachActionDefinitionWithImplicitType"}],"description":"A function that gets called for every message in the stream"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["peek"]}},"required":["forEach","type"],"title":"PeekOperation","type":"object"},"PipelineDefinition":{"additionalProperties":false,"description":"Defines a pipeline through a source, a series of operations to perform on it and a sink operation to close the stream with","properties":{"as":{"description":"*(optional)* The name to register the pipeline result under, which can be used as source by follow-up pipelines","type":"string"},"branch":{"description":"*(optional)* Defines a single branch, consisting of a condition and a pipeline to execute for messages that fulfil the predicate","items":{"$ref":"#/definitions/BranchDefinitionWithPipeline"},"type":"array"},"forEach":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ForEachActionDefinitionWithImplicitType"}],"description":"*(optional)* A function that gets called for every message in the stream"},"from":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TopicDefinitionSource"}],"description":"Pipeline source"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"print":{"$ref":"#/definitions/PrintOperation","description":"*(optional)* The specification of where to print messages to"},"to":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ToTopicDefinition"}],"description":"*(optional)* Ends the pipeline by sending all messages to a stream, table or globalTable, or to an inline defined output topic and optional partitioner"},"toTopicNameExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ToTopicNameExtractorDefinition"}],"description":"*(optional)* Ends the pipeline by sending all messages to a topic provided by a pre-defined topic name extractor function, or to a topic provided by an inline defined topic name extractor and optional partitioner"},"via":{"description":"*(optional)* A series of operations performed on the input stream","items":{"anyOf":[{"$ref":"#/definitions/AggregateOperation"},{"$ref":"#/definitions/CogroupOperation"},{"$ref":"#/definitions/ConvertKeyOperation"},{"$ref":"#/definitions/ConvertKeyValueOperation"},{"$ref":"#/definitions/ConvertValueOperation"},{"$ref":"#/definitions/CountOperation"},{"$ref":"#/definitions/FilterNotOperation"},{"$ref":"#/definitions/FilterOperation"},{"$ref":"#/definitions/GroupByKeyOperation"},{"$ref":"#/definitions/GroupByOperation"},{"$ref":"#/definitions/JoinOperationWithGlobalTable"},{"$ref":"#/definitions/JoinOperationWithStream"},{"$ref":"#/definitions/JoinOperationWithTable"},{"$ref":"#/definitions/LeftJoinOperationWithGlobalTable"},{"$ref":"#/definitions/LeftJoinOperationWithStream"},{"$ref":"#/definitions/LeftJoinOperationWithTable"},{"$ref":"#/definitions/MergeOperation"},{"$ref":"#/definitions/OuterJoinOperationWithStream"},{"$ref":"#/definitions/OuterJoinOperationWithTable"},{"$ref":"#/definitions/PeekOperation"},{"$ref":"#/definitions/ReduceOperationWithAdderAndSubtractor"},{"$ref":"#/definitions/ReduceOperationWithReducer"},{"$ref":"#/definitions/RepartitionOperation"},{"$ref":"#/definitions/SuppressOperationUntilTimeLimit"},{"$ref":"#/definitions/SuppressOperationUntilWindowCloses"},{"$ref":"#/definitions/ToStreamOperation"},{"$ref":"#/definitions/ToTableOperation"},{"$ref":"#/definitions/TransformKeyOperation"},{"$ref":"#/definitions/TransformKeyValueOperation"},{"$ref":"#/definitions/TransformKeyValueToKeyValueListOperation"},{"$ref":"#/definitions/TransformKeyValueToValueListOperation"},{"$ref":"#/definitions/TransformMetadataOperation"},{"$ref":"#/definitions/TransformValueOperation"},{"$ref":"#/definitions/WindowBySessionOperation"},{"$ref":"#/definitions/WindowByTimeOperationWithHoppingWindow"},{"$ref":"#/definitions/WindowByTimeOperationWithSlidingWindow"},{"$ref":"#/definitions/WindowByTimeOperationWithTumblingWindow"}]},"type":"array"}},"required":["from"],"title":"PipelineDefinition","type":"object"},"PredicateDefinition":{"additionalProperties":false,"description":"Defines a Function that returns true or false based on key/value input function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the Function that returns true or false based on key/value input"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the Function that returns true or false based on key/value input. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the Function that returns true or false based on key/value input. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the Function that returns true or false based on key/value input. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the Function that returns true or false based on key/value input","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the Function that returns true or false based on key/value input. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the Function that returns true or false based on key/value input uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["predicate"]}},"required":["type"],"title":"PredicateDefinition","type":"object"},"PredicateDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a Function that returns true or false based on key/value input function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the Function that returns true or false based on key/value input"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the Function that returns true or false based on key/value input. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the Function that returns true or false based on key/value input. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the Function that returns true or false based on key/value input. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the Function that returns true or false based on key/value input","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the Function that returns true or false based on key/value input. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the Function that returns true or false based on key/value input uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"PredicateDefinitionWithImplicitType","type":"object"},"PrintOperation":{"additionalProperties":false,"description":"Operation to print the contents of a pipeline on the screen or to write them to a file","properties":{"filename":{"description":"*(optional)* The filename to output records to. If nothing is specified, then messages will be printed on stdout.","type":"string"},"label":{"description":"*(optional)* A label to attach to the output records","type":"string"},"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValuePrinterDefinitionWithImplicitType"}],"description":"*(optional)* A function to convert record into a string for output"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"}},"title":"PrintOperation","type":"object"},"ProducerDefinition":{"additionalProperties":false,"description":"Definition of a Producer that regularly generates messages for a topic","properties":{"condition":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/PredicateDefinitionWithImplicitType"}],"description":"*(optional)* A function that validates the generator's result message. Returns \"true\" when the message may be produced on the topic, \"false\" otherwise."},"count":{"description":"*(optional)* The number of messages to produce."},"generator":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/GeneratorDefinitionWithImplicitType"}],"description":"The function that generates records"},"interval":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The interval with which the generator is called"},"to":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TopicDefinition"}],"description":"The topic to produce to"},"until":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/PredicateDefinitionWithImplicitType"}],"description":"*(optional)* A predicate that returns true to indicate producing should stop."}},"required":["generator","interval","to"],"title":"ProducerDefinition","type":"object"},"ReduceOperationWithAdderAndSubtractor":{"additionalProperties":false,"description":"Operation to reduce a series of records into a single aggregate result","properties":{"adder":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ReducerDefinitionWithImplicitType"}],"description":"A function that adds a record to the aggregate result"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/WindowStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the aggregation"},"subtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ReducerDefinitionWithImplicitType"}],"description":"A function that removes a record from the aggregate result"},"type":{"description":"The type of the operation","enum":["reduce"]}},"required":["adder","subtractor","type"],"title":"ReduceOperationWithAdderAndSubtractor","type":"object"},"ReduceOperationWithReducer":{"additionalProperties":false,"description":"Operation to reduce a series of records into a single aggregate result","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"reducer":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ReducerDefinitionWithImplicitType"}],"description":"A function that computes a new aggregate result"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/WindowStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the aggregation"},"type":{"description":"The type of the operation","enum":["reduce"]}},"required":["reducer","type"],"title":"ReduceOperationWithReducer","type":"object"},"ReducerDefinition":{"additionalProperties":false,"description":"Defines a reducer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the reducer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the reducer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the reducer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the reducer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the reducer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the reducer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the reducer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["reducer"]}},"required":["type"],"title":"ReducerDefinition","type":"object"},"ReducerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a reducer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the reducer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the reducer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the reducer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the reducer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the reducer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the reducer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the reducer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"ReducerDefinitionWithImplicitType","type":"object"},"RepartitionOperation":{"additionalProperties":false,"description":"Operation to (re)partition a stream","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"numberOfPartitions":{"description":"*(optional)* The target number of partitions"},"partitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions stream records"},"type":{"description":"The type of the operation","enum":["repartition"]}},"required":["type"],"title":"RepartitionOperation","type":"object"},"SessionStateStoreDefinition":{"additionalProperties":false,"description":"Definition of a session state store","properties":{"caching":{"description":"*(optional)* \"true\" if changed to the session store need to be buffered and periodically released, \"false\" to emit all changes directly","type":"boolean"},"keyType":{"description":"*(optional)* The key type of the session store","type":"string"},"logging":{"description":"*(optional)* \"true\" if a changelog topic should be set up on Kafka for this session store, \"false\" otherwise","type":"boolean"},"name":{"description":"*(optional)* The name of the session store. If this field is not defined, then the name is derived from the context.","type":"string"},"persistent":{"description":"*(optional)* \"true\" if this session store needs to be stored on disk, \"false\" otherwise","type":"boolean"},"retention":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The duration for which elements in the session store are retained"},"timestamped":{"description":"*(optional)* \"true\" if elements in the store are timestamped, \"false\" otherwise","type":"boolean"},"type":{"description":"The type of the state store","enum":["session"]},"valueType":{"description":"*(optional)* The value type of the session store","type":"string"}},"required":["type"],"title":"SessionStateStoreDefinition","type":"object"},"StreamDefinition":{"additionalProperties":false,"description":"Contains a definition of a Stream, which can be referenced by producers and pipelines","properties":{"keyType":{"description":"*(optional)* The key type of the stream","type":"string"},"topic":{"description":"The name of the Kafka topic for this stream","type":"string"},"valueType":{"description":"*(optional)* The value type of the stream","type":"string"}},"required":["topic"],"title":"StreamDefinition","type":"object"},"StreamDefinitionSource":{"additionalProperties":false,"description":"Contains a definition of a Stream, which can be referenced by producers and pipelines","properties":{"keyType":{"description":"The key type of the stream","type":"string"},"offsetResetPolicy":{"description":"*(optional)* Policy that determines what to do when there is no initial offset in Kafka, or if the current offset does not exist any more on the server (e.g. because that data has been deleted)","type":"string"},"timestampExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TimestampExtractorDefinitionWithImplicitType"}],"description":"*(optional)* A function extracts the event time from a consumed record"},"topic":{"description":"The name of the Kafka topic for this stream","type":"string"},"valueType":{"description":"The value type of the stream","type":"string"}},"required":["topic","keyType","valueType"],"title":"StreamDefinitionSource","type":"object"},"StreamPartitionerDefinition":{"additionalProperties":false,"description":"Defines a stream partitioner function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the stream partitioner"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the stream partitioner. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the stream partitioner. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the stream partitioner. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the stream partitioner","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the stream partitioner. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the stream partitioner uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["streamPartitioner"]}},"required":["type"],"title":"StreamPartitionerDefinition","type":"object"},"StreamPartitionerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a stream partitioner function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the stream partitioner"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the stream partitioner. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the stream partitioner. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the stream partitioner. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the stream partitioner","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the stream partitioner. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the stream partitioner uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"StreamPartitionerDefinitionWithImplicitType","type":"object"},"StringOrInlinePredicateDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines the condition under which messages get sent down this branch","properties":{"if":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/PredicateDefinitionWithImplicitType"}],"description":"*(optional)* Defines the condition under which messages get sent down this branch"}},"title":"StringOrInlinePredicateDefinitionWithImplicitType","type":"object"},"SuppressOperationUntilTimeLimit":{"additionalProperties":false,"description":"Operation to suppress messages in the source stream until a time limit is reached","properties":{"bufferFullStrategy":{"description":"*(optional)* What to do when the buffer is full","enum":["emitEarlyWhenFull","shutdownWhenFull"]},"duration":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The duration for which messages are suppressed"},"maxBytes":{"description":"*(optional)* The maximum number of bytes in the buffer","type":"string"},"maxRecords":{"description":"*(optional)* The maximum number of records in the buffer","type":"string"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["suppress"]},"until":{"description":"The until of the Operation to suppress messages in the source stream until a certain limit is reached","enum":["timeLimit"]}},"required":["duration","until","type"],"title":"SuppressOperationUntilTimeLimit","type":"object"},"SuppressOperationUntilWindowCloses":{"additionalProperties":false,"description":"Operation to suppress messages in the source stream until a window limit is reached","properties":{"bufferFullStrategy":{"description":"*(optional)* What to do when the buffer is full","enum":["emitEarlyWhenFull","shutdownWhenFull"]},"maxBytes":{"description":"*(optional)* The maximum number of bytes in the buffer","type":"string"},"maxRecords":{"description":"*(optional)* The maximum number of records in the buffer","type":"string"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["suppress"]},"until":{"description":"The until of the Operation to suppress messages in the source stream until a certain limit is reached","enum":["windowCloses"]}},"required":["until","type"],"title":"SuppressOperationUntilWindowCloses","type":"object"},"TableDefinition":{"additionalProperties":false,"description":"Contains a definition of a Table, which can be referenced by producers and pipelines","properties":{"keyType":{"description":"*(optional)* The key type of the table","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* KeyValue state store definition"},"topic":{"description":"The name of the Kafka topic for this table","type":"string"},"valueType":{"description":"*(optional)* The value type of the table","type":"string"}},"required":["topic"],"title":"TableDefinition","type":"object"},"TableDefinitionSource":{"additionalProperties":false,"description":"Contains a definition of a Table, which can be referenced by producers and pipelines","properties":{"keyType":{"description":"The key type of the table","type":"string"},"offsetResetPolicy":{"description":"*(optional)* Policy that determines what to do when there is no initial offset in Kafka, or if the current offset does not exist any more on the server (e.g. because that data has been deleted)","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* KeyValue state store definition"},"timestampExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TimestampExtractorDefinitionWithImplicitType"}],"description":"*(optional)* A function extracts the event time from a consumed record"},"topic":{"description":"The name of the Kafka topic for this table","type":"string"},"valueType":{"description":"The value type of the table","type":"string"}},"required":["topic","keyType","valueType"],"title":"TableDefinitionSource","type":"object"},"TimestampExtractorDefinition":{"additionalProperties":false,"description":"Defines a timestamp extractor function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the timestamp extractor"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the timestamp extractor. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the timestamp extractor. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the timestamp extractor. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the timestamp extractor","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the timestamp extractor. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the timestamp extractor uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["timestampExtractor"]}},"required":["type"],"title":"TimestampExtractorDefinition","type":"object"},"TimestampExtractorDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a timestamp extractor function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the timestamp extractor"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the timestamp extractor. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the timestamp extractor. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the timestamp extractor. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the timestamp extractor","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the timestamp extractor. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the timestamp extractor uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"TimestampExtractorDefinitionWithImplicitType","type":"object"},"ToStreamOperation":{"additionalProperties":false,"description":"Convert a Table into a Stream, optionally through a custom key transformer","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyTransformerDefinitionWithImplicitType"}],"description":"*(optional)* A function that computes the output key for every record"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["toStream"]}},"required":["type"],"title":"ToStreamOperation","type":"object"},"ToTableOperation":{"additionalProperties":false,"description":"Convert a Stream into a Table","properties":{"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the result table"},"type":{"description":"The type of the operation","enum":["toTable"]}},"required":["type"],"title":"ToTableOperation","type":"object"},"ToTopicDefinition":{"additionalProperties":false,"description":"Writes out pipeline messages to a topic","properties":{"keyType":{"description":"*(optional)* The key type of the topic","type":"string"},"partitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions the records in the output topic"},"topic":{"description":"The name of the Kafka topic","type":"string"},"valueType":{"description":"*(optional)* The value type of the topic","type":"string"}},"required":["topic"],"title":"ToTopicDefinition","type":"object"},"ToTopicNameExtractorDefinition":{"additionalProperties":false,"description":"Writes out pipeline messages to a topic as given by a topic name extractor","properties":{"partitioner":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/StreamPartitionerDefinitionWithImplicitType"}],"description":"*(optional)* A function that partitions the records in the output topic"},"topicNameExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TopicNameExtractorDefinitionWithImplicitType"}],"description":"Reference to a pre-defined topic name extractor, or an inline definition of a topic name extractor"}},"required":["topicNameExtractor"],"title":"ToTopicNameExtractorDefinition","type":"object"},"TopicDefinition":{"additionalProperties":false,"description":"Contains a definition of a Kafka topic, to be used by producers and pipelines","properties":{"keyType":{"description":"*(optional)* The key type of the topic","type":"string"},"topic":{"description":"The name of the Kafka topic","type":"string"},"valueType":{"description":"*(optional)* The value type of the topic","type":"string"}},"required":["topic"],"title":"TopicDefinition","type":"object"},"TopicDefinitionSource":{"additionalProperties":false,"description":"Contains a definition of a Kafka topic, to be used by producers and pipelines","properties":{"keyType":{"description":"The key type of the topic","type":"string"},"offsetResetPolicy":{"description":"*(optional)* Policy that determines what to do when there is no initial offset in Kafka, or if the current offset does not exist any more on the server (e.g. because that data has been deleted)","type":"string"},"timestampExtractor":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/TimestampExtractorDefinitionWithImplicitType"}],"description":"*(optional)* A function extracts the event time from a consumed record"},"topic":{"description":"The name of the Kafka topic","type":"string"},"valueType":{"description":"The value type of the topic","type":"string"}},"required":["topic","keyType","valueType"],"title":"TopicDefinitionSource","type":"object"},"TopicNameExtractorDefinition":{"additionalProperties":false,"description":"Defines a topic name extractor function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the topic name extractor"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the topic name extractor. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the topic name extractor. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the topic name extractor. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the topic name extractor","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the topic name extractor. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the topic name extractor uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["topicNameExtractor"]}},"required":["type"],"title":"TopicNameExtractorDefinition","type":"object"},"TopicNameExtractorDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a topic name extractor function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the topic name extractor"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the topic name extractor. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the topic name extractor. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the topic name extractor. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the topic name extractor","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the topic name extractor. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the topic name extractor uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"TopicNameExtractorDefinitionWithImplicitType","type":"object"},"TransformKeyOperation":{"additionalProperties":false,"description":"Convert the key of every record in the stream to another key","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyTransformerDefinitionWithImplicitType"}],"description":"A function that computes a new key for each record"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["transformKey","mapKey","selectKey"]}},"required":["mapper","type"],"title":"TransformKeyOperation","type":"object"},"TransformKeyValueOperation":{"additionalProperties":false,"description":"Convert the key/value of every record in the stream to another key/value","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueTransformerDefinitionWithImplicitType"}],"description":"A function that computes a new key/value for each record"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["mapKeyValue","map","transformKeyValue"]}},"required":["mapper","type"],"title":"TransformKeyValueOperation","type":"object"},"TransformKeyValueToKeyValueListOperation":{"additionalProperties":false,"description":"Convert a stream by transforming every record into a list of derived records","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueToKeyValueListTransformerDefinitionWithImplicitType"}],"description":"A function that converts every record of a stream to a list of output records."},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["transformKeyValueToKeyValueList","flatMap"]}},"required":["mapper","type"],"title":"TransformKeyValueToKeyValueListOperation","type":"object"},"TransformKeyValueToValueListOperation":{"additionalProperties":false,"description":"Convert every record in the stream to a list of output records with the same key","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueToValueListTransformerDefinitionWithImplicitType"}],"description":"A function that converts every key/value into a list of result values, each of which will be combined with the original key to form a new message in the output stream"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["transformKeyValueToValueList","flatMapValues"]}},"required":["mapper","type"],"title":"TransformKeyValueToValueListOperation","type":"object"},"TransformMetadataOperation":{"additionalProperties":false,"description":"Convert the metadata of every record in the stream","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/MetadataTransformerDefinitionWithImplicitType"}],"description":"A function that converts the metadata (Kafka headers, timestamp) of every record in the stream"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["transformMetadata"]}},"required":["mapper","type"],"title":"TransformMetadataOperation","type":"object"},"TransformValueOperation":{"additionalProperties":false,"description":"Convert the value of every record in the stream to another value","properties":{"mapper":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/ValueTransformerDefinitionWithImplicitType"}],"description":"A function that converts the value of every record into another value"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"store":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/KeyValueStateStoreDefinitionWithImplicitType"}],"description":"*(optional)* Materialized view of the transformed table (only applies to tables, ignored for streams)"},"type":{"description":"The type of the operation","enum":["mapValue","transformValue","mapValues"]}},"required":["mapper","type"],"title":"TransformValueOperation","type":"object"},"ValueJoinerDefinition":{"additionalProperties":false,"description":"Defines a value joiner function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the value joiner"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the value joiner. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the value joiner. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the value joiner. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the value joiner","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the value joiner. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the value joiner uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["valueJoiner"]}},"required":["type"],"title":"ValueJoinerDefinition","type":"object"},"ValueJoinerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a value joiner function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the value joiner"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the value joiner. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the value joiner. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the value joiner. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the value joiner","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the value joiner. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the value joiner uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"ValueJoinerDefinitionWithImplicitType","type":"object"},"ValueTransformerDefinition":{"additionalProperties":false,"description":"Defines a value transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the value transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the value transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the value transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the value transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the value transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the value transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the value transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the function","enum":["valueTransformer"]}},"required":["type"],"title":"ValueTransformerDefinition","type":"object"},"ValueTransformerDefinitionWithImplicitType":{"additionalProperties":false,"description":"Defines a value transformer function, that gets injected into the Kafka Streams topology","properties":{"code":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The (multiline) code of the value transformer"},"expression":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* The expression returned by the value transformer. Only required for functions that return values."},"globalCode":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"*(optional)* Global (multiline) code that gets loaded into the Python context outside of the value transformer. Can be used for defining eg. global variables."},"name":{"description":"*(optional)* The name of the value transformer. If this field is not defined, then the name is derived from the context.","type":"string"},"parameters":{"description":"*(optional)* A list of parameters to be passed into the value transformer","items":{"$ref":"#/definitions/ParameterDefinition"},"type":"array"},"resultType":{"description":"*(optional)* The data type returned by the value transformer. Only required for function types, which are not pre-defined.","type":"string"},"stores":{"description":"*(optional)* A list of store names that the value transformer uses. Only required if the function wants to use a state store.","items":{"type":"string"},"type":"array"}},"title":"ValueTransformerDefinitionWithImplicitType","type":"object"},"WindowBySessionOperation":{"additionalProperties":false,"description":"Operation to window messages by session, configured by an inactivity gap","properties":{"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* (Tumbling, Hopping) The grace period, during which out-of-order records can still be processed"},"inactivityGap":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The inactivity gap, below which two messages are considered to be of the same session"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["windowBySession"]}},"required":["inactivityGap","type"],"title":"WindowBySessionOperation","type":"object"},"WindowByTimeOperationWithHoppingWindow":{"additionalProperties":false,"description":"Operation to window records based on time criteria","properties":{"advanceBy":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The amount of time to increase time windows by"},"duration":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The duration of time windows"},"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The grace period, during which out-of-order records can still be processed"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["windowByTime"]},"windowType":{"description":"The windowType of the time window","enum":["hopping"]}},"required":["duration","advanceBy","windowType","type"],"title":"WindowByTimeOperationWithHoppingWindow","type":"object"},"WindowByTimeOperationWithSlidingWindow":{"additionalProperties":false,"description":"Operation to window records based on time criteria","properties":{"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The grace period, during which out-of-order records can still be processed"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"timeDifference":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The maximum amount of time difference between two records"},"type":{"description":"The type of the operation","enum":["windowByTime"]},"windowType":{"description":"The windowType of the time window","enum":["sliding"]}},"required":["timeDifference","windowType","type"],"title":"WindowByTimeOperationWithSlidingWindow","type":"object"},"WindowByTimeOperationWithTumblingWindow":{"additionalProperties":false,"description":"Operation to window records based on time criteria","properties":{"duration":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The duration of time windows"},"grace":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The grace period, during which out-of-order records can still be processed"},"name":{"description":"*(optional)* The name of the operation processor","type":"string"},"type":{"description":"The type of the operation","enum":["windowByTime"]},"windowType":{"description":"The windowType of the time window","enum":["tumbling"]}},"required":["duration","windowType","type"],"title":"WindowByTimeOperationWithTumblingWindow","type":"object"},"WindowStateStoreDefinition":{"additionalProperties":false,"description":"Definition of a window state store","properties":{"caching":{"description":"*(optional)* \"true\" if changed to the window store need to be buffered and periodically released, \"false\" to emit all changes directly","type":"boolean"},"keyType":{"description":"*(optional)* The key type of the window store","type":"string"},"logging":{"description":"*(optional)* \"true\" if a changelog topic should be set up on Kafka for this window store, \"false\" otherwise","type":"boolean"},"name":{"description":"*(optional)* The name of the window store. If this field is not defined, then the name is derived from the context.","type":"string"},"persistent":{"description":"*(optional)* \"true\" if this window store needs to be stored on disk, \"false\" otherwise","type":"boolean"},"retainDuplicates":{"description":"*(optional)* Whether or not to retain duplicates","type":"boolean"},"retention":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The duration for which elements in the window store are retained"},"timestamped":{"description":"*(optional)* \"true\" if elements in the store are timestamped, \"false\" otherwise","type":"boolean"},"type":{"description":"The type of the state store","enum":["window"]},"valueType":{"description":"*(optional)* The value type of the window store","type":"string"},"windowSize":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* Size of the windows (cannot be negative)"}},"required":["type"],"title":"WindowStateStoreDefinition","type":"object"},"WindowStateStoreDefinitionWithImplicitType":{"additionalProperties":false,"description":"Definition of a window state store","properties":{"caching":{"description":"*(optional)* \"true\" if changed to the window store need to be buffered and periodically released, \"false\" to emit all changes directly","type":"boolean"},"keyType":{"description":"*(optional)* The key type of the window store","type":"string"},"logging":{"description":"*(optional)* \"true\" if a changelog topic should be set up on Kafka for this window store, \"false\" otherwise","type":"boolean"},"name":{"description":"*(optional)* The name of the window store. If this field is not defined, then the name is derived from the context.","type":"string"},"persistent":{"description":"*(optional)* \"true\" if this window store needs to be stored on disk, \"false\" otherwise","type":"boolean"},"retainDuplicates":{"description":"*(optional)* Whether or not to retain duplicates","type":"boolean"},"retention":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* The duration for which elements in the window store are retained"},"timestamped":{"description":"*(optional)* \"true\" if elements in the store are timestamped, \"false\" otherwise","type":"boolean"},"type":{"description":"The type of the state store","enum":["window"]},"valueType":{"description":"*(optional)* The value type of the window store","type":"string"},"windowSize":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"*(optional)* Size of the windows (cannot be negative)"}},"title":"WindowStateStoreDefinitionWithImplicitType","type":"object"}},"description":"KSML definition","properties":{"functions":{"description":"*(optional)* Functions that can be referenced in producers and pipelines","patternProperties":{"^[a-zA-Z0-9_]+$":{"anyOf":[{"$ref":"#/definitions/AggregatorDefinition"},{"$ref":"#/definitions/ForEachActionDefinition"},{"$ref":"#/definitions/ForeignKeyExtractorDefinition"},{"$ref":"#/definitions/GeneratorDefinition"},{"$ref":"#/definitions/GenericFunctionDefinitionWithImplicitType"},{"$ref":"#/definitions/InitializerDefinition"},{"$ref":"#/definitions/KeyTransformerDefinition"},{"$ref":"#/definitions/KeyValueMapperDefinition"},{"$ref":"#/definitions/KeyValuePrinterDefinition"},{"$ref":"#/definitions/KeyValueToKeyValueListTransformerDefinition"},{"$ref":"#/definitions/KeyValueToValueListTransformerDefinition"},{"$ref":"#/definitions/KeyValueTransformerDefinition"},{"$ref":"#/definitions/MergerDefinition"},{"$ref":"#/definitions/MetadataTransformerDefinition"},{"$ref":"#/definitions/PredicateDefinition"},{"$ref":"#/definitions/ReducerDefinition"},{"$ref":"#/definitions/StreamPartitionerDefinition"},{"$ref":"#/definitions/TimestampExtractorDefinition"},{"$ref":"#/definitions/TopicNameExtractorDefinition"},{"$ref":"#/definitions/ValueJoinerDefinition"},{"$ref":"#/definitions/ValueTransformerDefinition"}]}},"type":"object"},"globalTables":{"description":"*(optional)* GlobalTables that can be referenced in producers and pipelines","patternProperties":{"^[a-zA-Z0-9_]+$":{"$ref":"#/definitions/GlobalTableDefinitionSource"}},"type":"object"},"pipelines":{"description":"*(optional)* Collection of named pipelines","patternProperties":{"^[a-zA-Z0-9_]+$":{"$ref":"#/definitions/PipelineDefinition"}},"type":"object"},"producers":{"description":"*(optional)* Collection of named producers","patternProperties":{"^[a-zA-Z0-9_]+$":{"$ref":"#/definitions/ProducerDefinition"}},"type":"object"},"stores":{"description":"*(optional)* State stores that can be referenced in producers and pipelines","patternProperties":{"^[a-zA-Z0-9_]+$":{"anyOf":[{"$ref":"#/definitions/KeyValueStateStoreDefinition"},{"$ref":"#/definitions/SessionStateStoreDefinition"},{"$ref":"#/definitions/WindowStateStoreDefinition"}]}},"type":"object"},"streams":{"description":"*(optional)* Streams that can be referenced in producers and pipelines","patternProperties":{"^[a-zA-Z0-9_]+$":{"$ref":"#/definitions/StreamDefinitionSource"}},"type":"object"},"tables":{"description":"*(optional)* Tables that can be referenced in producers and pipelines","patternProperties":{"^[a-zA-Z0-9_]+$":{"$ref":"#/definitions/TableDefinitionSource"}},"type":"object"}},"title":"TopologyDefinition","type":"object"} diff --git a/docs/ksml-language-spec.md b/docs/ksml-language-spec.md index c5c9d935..4fa1d751 100644 --- a/docs/ksml-language-spec.md +++ b/docs/ksml-language-spec.md @@ -132,8 +132,6 @@ - : Refer to *[#/definitions/PredicateDefinitionWithImplicitType](#definitions/PredicateDefinitionWithImplicitType)*. - **`name`** *(string)*: *(optional)* The name of the operation processor. - **`print`**: *(optional)* The specification of where to print messages to. Refer to *[#/definitions/PrintOperation](#definitions/PrintOperation)*. - - **`stores`** *(array)*: *(optional)* The names of all state stores used by the function. - - **Items** *(string)* - **`to`**: *(optional)* Ends the pipeline by sending all messages to a stream, table or globalTable, or to an inline defined output topic and optional partitioner. - **Any of** - *string* @@ -165,9 +163,11 @@ - : Refer to *[#/definitions/OuterJoinOperationWithStream](#definitions/OuterJoinOperationWithStream)*. - : Refer to *[#/definitions/OuterJoinOperationWithTable](#definitions/OuterJoinOperationWithTable)*. - : Refer to *[#/definitions/PeekOperation](#definitions/PeekOperation)*. - - : Refer to *[#/definitions/ReduceOperation](#definitions/ReduceOperation)*. + - : Refer to *[#/definitions/ReduceOperationWithAdderAndSubtractor](#definitions/ReduceOperationWithAdderAndSubtractor)*. + - : Refer to *[#/definitions/ReduceOperationWithReducer](#definitions/ReduceOperationWithReducer)*. - : Refer to *[#/definitions/RepartitionOperation](#definitions/RepartitionOperation)*. - - : Refer to *[#/definitions/SuppressOperation](#definitions/SuppressOperation)*. + - : Refer to *[#/definitions/SuppressOperationUntilTimeLimit](#definitions/SuppressOperationUntilTimeLimit)*. + - : Refer to *[#/definitions/SuppressOperationUntilWindowCloses](#definitions/SuppressOperationUntilWindowCloses)*. - : Refer to *[#/definitions/ToStreamOperation](#definitions/ToStreamOperation)*. - : Refer to *[#/definitions/ToTableOperation](#definitions/ToTableOperation)*. - : Refer to *[#/definitions/TransformKeyOperation](#definitions/TransformKeyOperation)*. @@ -177,7 +177,9 @@ - : Refer to *[#/definitions/TransformMetadataOperation](#definitions/TransformMetadataOperation)*. - : Refer to *[#/definitions/TransformValueOperation](#definitions/TransformValueOperation)*. - : Refer to *[#/definitions/WindowBySessionOperation](#definitions/WindowBySessionOperation)*. - - : Refer to *[#/definitions/WindowByTimeOperation](#definitions/WindowByTimeOperation)*. + - : Refer to *[#/definitions/WindowByTimeOperationWithHoppingWindow](#definitions/WindowByTimeOperationWithHoppingWindow)*. + - : Refer to *[#/definitions/WindowByTimeOperationWithSlidingWindow](#definitions/WindowByTimeOperationWithSlidingWindow)*. + - : Refer to *[#/definitions/WindowByTimeOperationWithTumblingWindow](#definitions/WindowByTimeOperationWithTumblingWindow)*. - **`CogroupOperation`** *(object)*: A cogroup operation. Cannot contain additional properties. - **`aggregator`**: (GroupedStream, SessionWindowedStream, TimeWindowedStream) The aggregator function, which combines a value with the previous aggregation result and outputs a new aggregation result. - **Any of** @@ -220,8 +222,6 @@ - **Any of** - *string* - : Refer to *[#/definitions/KeyValueStateStoreDefinitionWithImplicitType](#definitions/KeyValueStateStoreDefinitionWithImplicitType)*. - - **`stores`** *(array)*: *(optional)* The names of all state stores used by the function. - - **Items** *(string)* - **`type`**: The type of the operation. Must be one of: `["filterNot"]`. - **`FilterOperation`** *(object)*: Filter records based on a predicate function. Cannot contain additional properties. - **`if`**: A function that returns "true" when records are accepted, "false" otherwise. @@ -233,8 +233,6 @@ - **Any of** - *string* - : Refer to *[#/definitions/KeyValueStateStoreDefinitionWithImplicitType](#definitions/KeyValueStateStoreDefinitionWithImplicitType)*. - - **`stores`** *(array)*: *(optional)* The names of all state stores used by the function. - - **Items** *(string)* - **`type`**: The type of the operation. Must be one of: `["filter"]`. - **`ForEachActionDefinition`** *(object)*: Defines a foreach action function, that gets injected into the Kafka Streams topology. Cannot contain additional properties. - **`code`**: *(optional)* The (multiline) code of the foreach action. @@ -461,17 +459,11 @@ - **Any of** - *string* - : Refer to *[#/definitions/GlobalTableDefinition](#definitions/GlobalTableDefinition)*. - - **`mapper`**: A function that maps the key value from the stream with the primary key of the globalTable. + - **`mapper`**: A function that maps the key value from the stream to the primary key type of the globalTable. - **Any of** - *string* - : Refer to *[#/definitions/ValueJoinerDefinitionWithImplicitType](#definitions/ValueJoinerDefinitionWithImplicitType)*. - **`name`** *(string)*: *(optional)* The name of the operation processor. - - **`store`**: *(optional)* Materialized view of the joined streams. - - **Any of** - - *string* - - : Refer to *[#/definitions/KeyValueStateStoreDefinition](#definitions/KeyValueStateStoreDefinition)*. - - : Refer to *[#/definitions/SessionStateStoreDefinition](#definitions/SessionStateStoreDefinition)*. - - : Refer to *[#/definitions/WindowStateStoreDefinition](#definitions/WindowStateStoreDefinition)*. - **`type`**: The type of the operation. Must be one of: `["join"]`. - **`valueJoiner`**: A function that joins two values. - **Any of** @@ -851,12 +843,6 @@ - *string* - : Refer to *[#/definitions/ValueJoinerDefinitionWithImplicitType](#definitions/ValueJoinerDefinitionWithImplicitType)*. - **`name`** *(string)*: *(optional)* The name of the operation processor. - - **`store`**: *(optional)* Materialized view of the leftJoined streams. - - **Any of** - - *string* - - : Refer to *[#/definitions/KeyValueStateStoreDefinition](#definitions/KeyValueStateStoreDefinition)*. - - : Refer to *[#/definitions/SessionStateStoreDefinition](#definitions/SessionStateStoreDefinition)*. - - : Refer to *[#/definitions/WindowStateStoreDefinition](#definitions/WindowStateStoreDefinition)*. - **`type`**: The type of the operation. Must be one of: `["leftJoin"]`. - **`valueJoiner`**: A function that joins two values. - **Any of** @@ -1069,8 +1055,6 @@ - *string* - : Refer to *[#/definitions/ForEachActionDefinitionWithImplicitType](#definitions/ForEachActionDefinitionWithImplicitType)*. - **`name`** *(string)*: *(optional)* The name of the operation processor. - - **`stores`** *(array)*: *(optional)* The names of all state stores used by the function. - - **Items** *(string)* - **`type`**: The type of the operation. Must be one of: `["peek"]`. - **`PipelineDefinition`** *(object)*: Defines a pipeline through a source, a series of operations to perform on it and a sink operation to close the stream with. Cannot contain additional properties. - **`as`** *(string)*: *(optional)* The name to register the pipeline result under, which can be used as source by follow-up pipelines. @@ -1086,8 +1070,6 @@ - : Refer to *[#/definitions/TopicDefinitionSource](#definitions/TopicDefinitionSource)*. - **`name`** *(string)*: *(optional)* The name of the operation processor. - **`print`**: *(optional)* The specification of where to print messages to. Refer to *[#/definitions/PrintOperation](#definitions/PrintOperation)*. - - **`stores`** *(array)*: *(optional)* The names of all state stores used by the function. - - **Items** *(string)* - **`to`**: *(optional)* Ends the pipeline by sending all messages to a stream, table or globalTable, or to an inline defined output topic and optional partitioner. - **Any of** - *string* @@ -1119,9 +1101,11 @@ - : Refer to *[#/definitions/OuterJoinOperationWithStream](#definitions/OuterJoinOperationWithStream)*. - : Refer to *[#/definitions/OuterJoinOperationWithTable](#definitions/OuterJoinOperationWithTable)*. - : Refer to *[#/definitions/PeekOperation](#definitions/PeekOperation)*. - - : Refer to *[#/definitions/ReduceOperation](#definitions/ReduceOperation)*. + - : Refer to *[#/definitions/ReduceOperationWithAdderAndSubtractor](#definitions/ReduceOperationWithAdderAndSubtractor)*. + - : Refer to *[#/definitions/ReduceOperationWithReducer](#definitions/ReduceOperationWithReducer)*. - : Refer to *[#/definitions/RepartitionOperation](#definitions/RepartitionOperation)*. - - : Refer to *[#/definitions/SuppressOperation](#definitions/SuppressOperation)*. + - : Refer to *[#/definitions/SuppressOperationUntilTimeLimit](#definitions/SuppressOperationUntilTimeLimit)*. + - : Refer to *[#/definitions/SuppressOperationUntilWindowCloses](#definitions/SuppressOperationUntilWindowCloses)*. - : Refer to *[#/definitions/ToStreamOperation](#definitions/ToStreamOperation)*. - : Refer to *[#/definitions/ToTableOperation](#definitions/ToTableOperation)*. - : Refer to *[#/definitions/TransformKeyOperation](#definitions/TransformKeyOperation)*. @@ -1131,7 +1115,9 @@ - : Refer to *[#/definitions/TransformMetadataOperation](#definitions/TransformMetadataOperation)*. - : Refer to *[#/definitions/TransformValueOperation](#definitions/TransformValueOperation)*. - : Refer to *[#/definitions/WindowBySessionOperation](#definitions/WindowBySessionOperation)*. - - : Refer to *[#/definitions/WindowByTimeOperation](#definitions/WindowByTimeOperation)*. + - : Refer to *[#/definitions/WindowByTimeOperationWithHoppingWindow](#definitions/WindowByTimeOperationWithHoppingWindow)*. + - : Refer to *[#/definitions/WindowByTimeOperationWithSlidingWindow](#definitions/WindowByTimeOperationWithSlidingWindow)*. + - : Refer to *[#/definitions/WindowByTimeOperationWithTumblingWindow](#definitions/WindowByTimeOperationWithTumblingWindow)*. - **`PredicateDefinition`** *(object)*: Defines a Function that returns true or false based on key/value input function, that gets injected into the Kafka Streams topology. Cannot contain additional properties. - **`code`**: *(optional)* The (multiline) code of the Function that returns true or false based on key/value input. - **Any of** @@ -1207,16 +1193,12 @@ - **Any of** - *string* - : Refer to *[#/definitions/PredicateDefinitionWithImplicitType](#definitions/PredicateDefinitionWithImplicitType)*. -- **`ReduceOperation`** *(object)*: Operation to reduce a series of records into a single aggregate result. Cannot contain additional properties. +- **`ReduceOperationWithAdderAndSubtractor`** *(object)*: Operation to reduce a series of records into a single aggregate result. Cannot contain additional properties. - **`adder`**: A function that adds a record to the aggregate result. - **Any of** - *string* - : Refer to *[#/definitions/ReducerDefinitionWithImplicitType](#definitions/ReducerDefinitionWithImplicitType)*. - **`name`** *(string)*: *(optional)* The name of the operation processor. - - **`reducer`**: A function that computes a new aggregate result. - - **Any of** - - *string* - - : Refer to *[#/definitions/ReducerDefinitionWithImplicitType](#definitions/ReducerDefinitionWithImplicitType)*. - **`store`**: *(optional)* Materialized view of the aggregation. - **Any of** - *string* @@ -1226,6 +1208,17 @@ - *string* - : Refer to *[#/definitions/ReducerDefinitionWithImplicitType](#definitions/ReducerDefinitionWithImplicitType)*. - **`type`**: The type of the operation. Must be one of: `["reduce"]`. +- **`ReduceOperationWithReducer`** *(object)*: Operation to reduce a series of records into a single aggregate result. Cannot contain additional properties. + - **`name`** *(string)*: *(optional)* The name of the operation processor. + - **`reducer`**: A function that computes a new aggregate result. + - **Any of** + - *string* + - : Refer to *[#/definitions/ReducerDefinitionWithImplicitType](#definitions/ReducerDefinitionWithImplicitType)*. + - **`store`**: *(optional)* Materialized view of the aggregation. + - **Any of** + - *string* + - : Refer to *[#/definitions/WindowStateStoreDefinitionWithImplicitType](#definitions/WindowStateStoreDefinitionWithImplicitType)*. + - **`type`**: The type of the operation. Must be one of: `["reduce"]`. - **`ReducerDefinition`** *(object)*: Defines a reducer function, that gets injected into the Kafka Streams topology. Cannot contain additional properties. - **`code`**: *(optional)* The (multiline) code of the reducer. - **Any of** @@ -1273,7 +1266,8 @@ - **Items** *(string)* - **`RepartitionOperation`** *(object)*: Operation to (re)partition a stream. Cannot contain additional properties. - **`name`** *(string)*: *(optional)* The name of the operation processor. - - **`partitioner`**: A function that partitions stream records. + - **`numberOfPartitions`**: *(optional)* The target number of partitions. + - **`partitioner`**: *(optional)* A function that partitions stream records. - **Any of** - *string* - : Refer to *[#/definitions/StreamPartitionerDefinitionWithImplicitType](#definitions/StreamPartitionerDefinitionWithImplicitType)*. @@ -1354,8 +1348,8 @@ - **Any of** - *string* - : Refer to *[#/definitions/PredicateDefinitionWithImplicitType](#definitions/PredicateDefinitionWithImplicitType)*. -- **`SuppressOperation`** *(object)*: Operation to suppress messages in the source stream until a certain limit is reached. Cannot contain additional properties. - - **`bufferFullStrategy`** *(string)*: *(optional)* What to do when the buffer is full, either "emitEarlyWhenFull", or "shutdownWhenFull". +- **`SuppressOperationUntilTimeLimit`** *(object)*: Operation to suppress messages in the source stream until a time limit is reached. Cannot contain additional properties. + - **`bufferFullStrategy`**: *(optional)* What to do when the buffer is full. Must be one of: `["emitEarlyWhenFull", "shutdownWhenFull"]`. - **`duration`**: The duration for which messages are suppressed. - **Any of** - *number* @@ -1364,7 +1358,14 @@ - **`maxRecords`** *(string)*: *(optional)* The maximum number of records in the buffer. - **`name`** *(string)*: *(optional)* The name of the operation processor. - **`type`**: The type of the operation. Must be one of: `["suppress"]`. - - **`until`** *(string, required)*: The method by which messages are held, either "timeLimit", or "windowCloses". + - **`until`**: The until of the Operation to suppress messages in the source stream until a certain limit is reached. Must be one of: `["timeLimit"]`. +- **`SuppressOperationUntilWindowCloses`** *(object)*: Operation to suppress messages in the source stream until a window limit is reached. Cannot contain additional properties. + - **`bufferFullStrategy`**: *(optional)* What to do when the buffer is full. Must be one of: `["emitEarlyWhenFull", "shutdownWhenFull"]`. + - **`maxBytes`** *(string)*: *(optional)* The maximum number of bytes in the buffer. + - **`maxRecords`** *(string)*: *(optional)* The maximum number of records in the buffer. + - **`name`** *(string)*: *(optional)* The name of the operation processor. + - **`type`**: The type of the operation. Must be one of: `["suppress"]`. + - **`until`**: The until of the Operation to suppress messages in the source stream until a certain limit is reached. Must be one of: `["windowCloses"]`. - **`TableDefinition`** *(object)*: Contains a definition of a Table, which can be referenced by producers and pipelines. Cannot contain additional properties. - **`keyType`** *(string)*: *(optional)* The key type of the table. - **`store`**: *(optional)* KeyValue state store definition. @@ -1526,8 +1527,6 @@ - *string* - : Refer to *[#/definitions/KeyTransformerDefinitionWithImplicitType](#definitions/KeyTransformerDefinitionWithImplicitType)*. - **`name`** *(string)*: *(optional)* The name of the operation processor. - - **`stores`** *(array)*: *(optional)* The names of all state stores used by the function. - - **Items** *(string)* - **`type`**: The type of the operation. Must be one of: `["transformKey", "mapKey", "selectKey"]`. - **`TransformKeyValueOperation`** *(object)*: Convert the key/value of every record in the stream to another key/value. Cannot contain additional properties. - **`mapper`**: A function that computes a new key/value for each record. @@ -1535,8 +1534,6 @@ - *string* - : Refer to *[#/definitions/KeyValueTransformerDefinitionWithImplicitType](#definitions/KeyValueTransformerDefinitionWithImplicitType)*. - **`name`** *(string)*: *(optional)* The name of the operation processor. - - **`stores`** *(array)*: *(optional)* The names of all state stores used by the function. - - **Items** *(string)* - **`type`**: The type of the operation. Must be one of: `["mapKeyValue", "map", "transformKeyValue"]`. - **`TransformKeyValueToKeyValueListOperation`** *(object)*: Convert a stream by transforming every record into a list of derived records. Cannot contain additional properties. - **`mapper`**: A function that converts every record of a stream to a list of output records. @@ -1544,8 +1541,6 @@ - *string* - : Refer to *[#/definitions/KeyValueToKeyValueListTransformerDefinitionWithImplicitType](#definitions/KeyValueToKeyValueListTransformerDefinitionWithImplicitType)*. - **`name`** *(string)*: *(optional)* The name of the operation processor. - - **`stores`** *(array)*: *(optional)* The names of all state stores used by the function. - - **Items** *(string)* - **`type`**: The type of the operation. Must be one of: `["transformKeyValueToKeyValueList", "flatMap"]`. - **`TransformKeyValueToValueListOperation`** *(object)*: Convert every record in the stream to a list of output records with the same key. Cannot contain additional properties. - **`mapper`**: A function that converts every key/value into a list of result values, each of which will be combined with the original key to form a new message in the output stream. @@ -1553,8 +1548,6 @@ - *string* - : Refer to *[#/definitions/KeyValueToValueListTransformerDefinitionWithImplicitType](#definitions/KeyValueToValueListTransformerDefinitionWithImplicitType)*. - **`name`** *(string)*: *(optional)* The name of the operation processor. - - **`stores`** *(array)*: *(optional)* The names of all state stores used by the function. - - **Items** *(string)* - **`type`**: The type of the operation. Must be one of: `["transformKeyValueToValueList", "flatMapValues"]`. - **`TransformMetadataOperation`** *(object)*: Convert the metadata of every record in the stream. Cannot contain additional properties. - **`mapper`**: A function that converts the metadata (Kafka headers, timestamp) of every record in the stream. @@ -1562,8 +1555,6 @@ - *string* - : Refer to *[#/definitions/MetadataTransformerDefinitionWithImplicitType](#definitions/MetadataTransformerDefinitionWithImplicitType)*. - **`name`** *(string)*: *(optional)* The name of the operation processor. - - **`stores`** *(array)*: *(optional)* The names of all state stores used by the function. - - **Items** *(string)* - **`type`**: The type of the operation. Must be one of: `["transformMetadata"]`. - **`TransformValueOperation`** *(object)*: Convert the value of every record in the stream to another value. Cannot contain additional properties. - **`mapper`**: A function that converts the value of every record into another value. @@ -1575,8 +1566,6 @@ - **Any of** - *string* - : Refer to *[#/definitions/KeyValueStateStoreDefinitionWithImplicitType](#definitions/KeyValueStateStoreDefinitionWithImplicitType)*. - - **`stores`** *(array)*: *(optional)* The names of all state stores used by the function. - - **Items** *(string)* - **`type`**: The type of the operation. Must be one of: `["mapValue", "transformValue", "mapValues"]`. - **`ValueJoinerDefinition`** *(object)*: Defines a value joiner function, that gets injected into the Kafka Streams topology. Cannot contain additional properties. - **`code`**: *(optional)* The (multiline) code of the value joiner. @@ -1679,26 +1668,46 @@ - *string* - **`name`** *(string)*: *(optional)* The name of the operation processor. - **`type`**: The type of the operation. Must be one of: `["windowBySession"]`. -- **`WindowByTimeOperation`** *(object)*: Operation to reduce a series of records into a single aggregate result. Cannot contain additional properties. - - **`advanceBy`**: *(optional)* (Hopping) The amount of time to increase time windows by. +- **`WindowByTimeOperationWithHoppingWindow`** *(object)*: Operation to window records based on time criteria. Cannot contain additional properties. + - **`advanceBy`**: The amount of time to increase time windows by. - **Any of** - *number* - *string* - - **`duration`**: *(optional)* (Tumbling) The duration of time windows. + - **`duration`**: The duration of time windows. - **Any of** - *number* - *string* - - **`grace`**: *(optional)* (Tumbling, Hopping, Sliding) The grace period, during which out-of-order records can still be processed. + - **`grace`**: *(optional)* The grace period, during which out-of-order records can still be processed. - **Any of** - *number* - *string* - **`name`** *(string)*: *(optional)* The name of the operation processor. - - **`timeDifference`**: *(optional)* (Sliding) The maximum amount of time difference between two records. + - **`type`**: The type of the operation. Must be one of: `["windowByTime"]`. + - **`windowType`**: The windowType of the time window. Must be one of: `["hopping"]`. +- **`WindowByTimeOperationWithSlidingWindow`** *(object)*: Operation to window records based on time criteria. Cannot contain additional properties. + - **`grace`**: *(optional)* The grace period, during which out-of-order records can still be processed. - **Any of** - *number* - *string* + - **`name`** *(string)*: *(optional)* The name of the operation processor. + - **`timeDifference`**: The maximum amount of time difference between two records. + - **Any of** + - *number* + - *string* + - **`type`**: The type of the operation. Must be one of: `["windowByTime"]`. + - **`windowType`**: The windowType of the time window. Must be one of: `["sliding"]`. +- **`WindowByTimeOperationWithTumblingWindow`** *(object)*: Operation to window records based on time criteria. Cannot contain additional properties. + - **`duration`**: The duration of time windows. + - **Any of** + - *number* + - *string* + - **`grace`**: *(optional)* The grace period, during which out-of-order records can still be processed. + - **Any of** + - *number* + - *string* + - **`name`** *(string)*: *(optional)* The name of the operation processor. - **`type`**: The type of the operation. Must be one of: `["windowByTime"]`. - - **`windowType`** *(string, required)*: The type of the operation, either "tumbling", or "hopping", or "sliding". + - **`windowType`**: The windowType of the time window. Must be one of: `["tumbling"]`. - **`WindowStateStoreDefinition`** *(object)*: Definition of a window state store. Cannot contain additional properties. - **`caching`** *(boolean)*: *(optional)* "true" if changed to the window store need to be buffered and periodically released, "false" to emit all changes directly. - **`keyType`** *(string)*: *(optional)* The key type of the window store. diff --git a/docs/operations.md b/docs/operations.md index 340936b0..b2366a8d 100644 --- a/docs/operations.md +++ b/docs/operations.md @@ -277,6 +277,7 @@ the predicate returns `true`, then the message will be sent to the output stream | Stream Type | Returns | Parameter | Value Type | Required | Description | |:-----------------|:-----------------|:----------|:-----------|:--------------------|:----------------------------------------------------------------------------------------------------| | [KStream]`` | [KStream]`` | `if` | Yes | Inline or reference | A [Predicate] function, which returns `True` if the message can pass the filter, `False` otherwise. | +| | | | | | | | [KTable]`` | [KTable]`` | `if` | Yes | Inline or reference | A [Predicate] function, which returns `True` if the message can pass the filter, `False` otherwise. | Example: diff --git a/ksml/NOTICE.txt b/ksml/NOTICE.txt index f9b500c5..b7675010 100644 --- a/ksml/NOTICE.txt +++ b/ksml/NOTICE.txt @@ -1,5 +1,5 @@ -Lists of 71 third-party dependencies. +Lists of 72 third-party dependencies. (MIT License) minimal-json (com.eclipsesource.minimal-json:minimal-json:0.9.5 - https://github.com/ralfstx/minimal-json) (The Apache Software License, Version 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.17.1 - https://github.com/FasterXML/jackson) (The Apache Software License, Version 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.17.1 - https://github.com/FasterXML/jackson-core) @@ -34,6 +34,7 @@ Lists of 71 third-party dependencies. (Apache License 2.0) Metrics Integration with JMX (io.dropwizard.metrics:metrics-jmx:4.2.25 - https://metrics.dropwizard.io/metrics-jmx) (Apache License 2.0) swagger-annotations (io.swagger.core.v3:swagger-annotations:2.1.10 - https://github.com/swagger-api/swagger-core/modules/swagger-annotations) (EDL 1.0) Jakarta Activation API (jakarta.activation:jakarta.activation-api:2.1.3 - https://github.com/jakartaee/jaf-api) + (Apache License 2.0) Jakarta Bean Validation API (jakarta.validation:jakarta.validation-api:3.0.2 - https://beanvalidation.org) (Eclipse Distribution License - v 1.0) Jakarta SOAP with Attachments API (jakarta.xml.soap:jakarta.xml.soap-api:3.0.2 - https://github.com/jakartaee/saaj-api) (Apache-2.0) Apache Avro (org.apache.avro:avro:1.11.3 - https://avro.apache.org) (Apache-2.0) Apache Commons Compress (org.apache.commons:commons-compress:1.26.2 - https://commons.apache.org/proper/commons-compress/) diff --git a/ksml/src/main/java/io/axual/ksml/definition/parser/PipelineDefinitionParser.java b/ksml/src/main/java/io/axual/ksml/definition/parser/PipelineDefinitionParser.java index 2948a4a3..e3518df9 100644 --- a/ksml/src/main/java/io/axual/ksml/definition/parser/PipelineDefinitionParser.java +++ b/ksml/src/main/java/io/axual/ksml/definition/parser/PipelineDefinitionParser.java @@ -90,7 +90,7 @@ public StructsParser parser() { // If no sink operation was specified, then we create an AS operation here with the name provided. // This means that pipeline results can be referred to by other pipelines using the pipeline's name // as identifier. - var sinkOperation = shortName != null ? new AsOperation(new OperationConfig(resources().getUniqueOperationName(longName), tags, null), shortName) : null; + var sinkOperation = shortName != null ? new AsOperation(new OperationConfig(resources().getUniqueOperationName(longName), tags), shortName) : null; return new PipelineDefinition(name, from, via, sinkOperation); }); } diff --git a/ksml/src/main/java/io/axual/ksml/dsl/KSMLDSL.java b/ksml/src/main/java/io/axual/ksml/dsl/KSMLDSL.java index 8837bb7d..596e3ecb 100644 --- a/ksml/src/main/java/io/axual/ksml/dsl/KSMLDSL.java +++ b/ksml/src/main/java/io/axual/ksml/dsl/KSMLDSL.java @@ -86,7 +86,6 @@ public static class Operations { public static final String NAME_ATTRIBUTE = "name"; public static final String TYPE_ATTRIBUTE = "type"; public static final String STORE_ATTRIBUTE = "store"; - public static final String STORE_NAMES_ATTRIBUTE = "stores"; public static final String AGGREGATE = "aggregate"; public static final String COGROUP = "cogroup"; diff --git a/ksml/src/main/java/io/axual/ksml/operation/BaseOperation.java b/ksml/src/main/java/io/axual/ksml/operation/BaseOperation.java index 7c3a61ac..2a676879 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/BaseOperation.java +++ b/ksml/src/main/java/io/axual/ksml/operation/BaseOperation.java @@ -67,7 +67,6 @@ public static String validateNameAndReturnError(String name) { protected final String name; protected final ContextTags tags; - protected final String[] storeNames; public BaseOperation(OperationConfig config) { var error = NameValidator.validateNameAndReturnError(config.name()); @@ -78,7 +77,6 @@ public BaseOperation(OperationConfig config) { name = config.name(); } tags = config.tags().append("operation-name", name); - storeNames = config.storeNames() != null ? config.storeNames() : new String[0]; } @Override @@ -287,14 +285,6 @@ protected void checkTuple(String faultDescription, DataType type, DataType... el } } - protected String[] combineStoreNames(String[]... storeNameArrays) { - final var storeNames = new TreeSet(); - for (String[] storeNameArray : storeNameArrays) { - if (storeNameArray != null) Collections.addAll(storeNames, storeNameArray); - } - return storeNames.toArray(TEMPLATE); - } - protected StreamDataType streamDataTypeOf(DataType dataType, boolean isKey) { return streamDataTypeOf(new UserType(dataType), isKey); } diff --git a/ksml/src/main/java/io/axual/ksml/operation/FilterNotOperation.java b/ksml/src/main/java/io/axual/ksml/operation/FilterNotOperation.java index 4372317f..cf6277e4 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/FilterNotOperation.java +++ b/ksml/src/main/java/io/axual/ksml/operation/FilterNotOperation.java @@ -54,7 +54,7 @@ public StreamWrapper apply(KStreamWrapper input, TopologyBuildContext context) { final var v = input.valueType(); final var pred = userFunctionOf(context, PREDICATE_NAME, predicate, new UserType(DataBoolean.DATATYPE), superOf(k), superOf(v)); final var userPred = new UserPredicate(pred, tags); - final var storeNames = combineStoreNames(this.storeNames, predicate.storeNames().toArray(TEMPLATE)); + final var storeNames = predicate.storeNames().toArray(String[]::new); final var supplier = new FixedKeyOperationProcessorSupplier<>( name, FilterNotProcessor::new, diff --git a/ksml/src/main/java/io/axual/ksml/operation/FilterOperation.java b/ksml/src/main/java/io/axual/ksml/operation/FilterOperation.java index fa78b4bd..a450b10e 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/FilterOperation.java +++ b/ksml/src/main/java/io/axual/ksml/operation/FilterOperation.java @@ -54,7 +54,7 @@ public StreamWrapper apply(KStreamWrapper input, TopologyBuildContext context) { final var v = input.valueType(); final var pred = userFunctionOf(context, PREDICATE_NAME, predicate, new UserType(DataBoolean.DATATYPE), superOf(k), superOf(v)); final var userPred = new UserPredicate(pred, tags); - final var storeNames = combineStoreNames(this.storeNames, predicate.storeNames().toArray(TEMPLATE)); + final var storeNames = predicate.storeNames().toArray(String[]::new); final var supplier = new FixedKeyOperationProcessorSupplier<>( name, FilterProcessor::new, diff --git a/ksml/src/main/java/io/axual/ksml/operation/OperationConfig.java b/ksml/src/main/java/io/axual/ksml/operation/OperationConfig.java index 1525a529..399e313a 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/OperationConfig.java +++ b/ksml/src/main/java/io/axual/ksml/operation/OperationConfig.java @@ -29,14 +29,10 @@ public class OperationConfig { private final String name; private final ContextTags tags; - private final boolean allowStores; - private final String[] storeNames; - public OperationConfig(String name, ContextTags tags, String[] storeNames) { + public OperationConfig(String name, ContextTags tags) { this.name = name; this.tags = tags; log.debug("Generated operation name: {}", this.name); - this.allowStores = storeNames != null; - this.storeNames = storeNames; } } diff --git a/ksml/src/main/java/io/axual/ksml/operation/PeekOperation.java b/ksml/src/main/java/io/axual/ksml/operation/PeekOperation.java index 2d12dd09..20bfe34d 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/PeekOperation.java +++ b/ksml/src/main/java/io/axual/ksml/operation/PeekOperation.java @@ -46,7 +46,7 @@ public StreamWrapper apply(KStreamWrapper input, TopologyBuildContext context) { final var v = input.valueType(); final var action = userFunctionOf(context, FOREACHACTION_NAME, forEachAction, equalTo(DataNull.DATATYPE), superOf(k), superOf(v)); final var userAction = new UserForeachAction(action, tags); - final var storeNames = combineStoreNames(this.storeNames, forEachAction.storeNames().toArray(TEMPLATE)); + final var storeNames = forEachAction.storeNames().toArray(String[]::new); final var supplier = new FixedKeyOperationProcessorSupplier<>( name, PeekProcessor::new, diff --git a/ksml/src/main/java/io/axual/ksml/operation/StoreOperationConfig.java b/ksml/src/main/java/io/axual/ksml/operation/StoreOperationConfig.java index 46cbd182..7015b254 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/StoreOperationConfig.java +++ b/ksml/src/main/java/io/axual/ksml/operation/StoreOperationConfig.java @@ -28,8 +28,8 @@ public class StoreOperationConfig extends OperationConfig { public final StateStoreDefinition store; - public StoreOperationConfig(String name, ContextTags context, StateStoreDefinition store, List storeNames) { - super(name, context, storeNames != null ? storeNames.toArray(new String[]{}) : null); + public StoreOperationConfig(String name, ContextTags context, StateStoreDefinition store) { + super(name, context); this.store = store; } } diff --git a/ksml/src/main/java/io/axual/ksml/operation/TransformKeyOperation.java b/ksml/src/main/java/io/axual/ksml/operation/TransformKeyOperation.java index bd2547aa..ff719721 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/TransformKeyOperation.java +++ b/ksml/src/main/java/io/axual/ksml/operation/TransformKeyOperation.java @@ -53,7 +53,7 @@ public StreamWrapper apply(KStreamWrapper input, TopologyBuildContext context) { final var kr = streamDataTypeOf(firstSpecificType(mapper, k), true); final var map = userFunctionOf(context, MAPPER_NAME, mapper, kr, superOf(k), superOf(v)); final var userMap = new UserKeyTransformer(map, tags); - final var storeNames = combineStoreNames(this.storeNames, mapper.storeNames().toArray(TEMPLATE)); + final var storeNames = mapper.storeNames().toArray(String[]::new); final var supplier = new OperationProcessorSupplier<>( name, TransformKeyProcessor::new, diff --git a/ksml/src/main/java/io/axual/ksml/operation/TransformKeyValueOperation.java b/ksml/src/main/java/io/axual/ksml/operation/TransformKeyValueOperation.java index 78b7769e..0c506fc6 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/TransformKeyValueOperation.java +++ b/ksml/src/main/java/io/axual/ksml/operation/TransformKeyValueOperation.java @@ -62,7 +62,7 @@ public BaseStreamWrapper apply(KStreamWrapper input, TopologyBuildContext contex final var kr = streamDataTypeOf(userTupleType.getUserType(0), true); final var vr = streamDataTypeOf(userTupleType.getUserType(1), false); final var userMap = new UserKeyValueTransformer(map, tags); - final var storeNames = combineStoreNames(this.storeNames, mapper.storeNames().toArray(TEMPLATE)); + final var storeNames = mapper.storeNames().toArray(String[]::new); final var supplier = new OperationProcessorSupplier<>( name, TransformKeyValueProcessor::new, diff --git a/ksml/src/main/java/io/axual/ksml/operation/TransformKeyValueToKeyValueListOperation.java b/ksml/src/main/java/io/axual/ksml/operation/TransformKeyValueToKeyValueListOperation.java index 548bdc02..dd48afad 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/TransformKeyValueToKeyValueListOperation.java +++ b/ksml/src/main/java/io/axual/ksml/operation/TransformKeyValueToKeyValueListOperation.java @@ -64,7 +64,7 @@ public StreamWrapper apply(KStreamWrapper input, TopologyBuildContext context) { final var kr = streamDataTypeOf(mapperResultListTupleValueType.getUserType(0), true); final var vr = streamDataTypeOf(mapperResultListTupleValueType.getUserType(1), false); final var userMap = new UserKeyValueToKeyValueListTransformer(map, tags); - final var storeNames = combineStoreNames(this.storeNames, mapper.storeNames().toArray(TEMPLATE)); + final var storeNames = mapper.storeNames().toArray(String[]::new); final var supplier = new OperationProcessorSupplier<>( name, TransformKeyValueToKeyValueListProcessor::new, diff --git a/ksml/src/main/java/io/axual/ksml/operation/TransformKeyValueToValueListOperation.java b/ksml/src/main/java/io/axual/ksml/operation/TransformKeyValueToValueListOperation.java index 16256b93..defd083a 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/TransformKeyValueToValueListOperation.java +++ b/ksml/src/main/java/io/axual/ksml/operation/TransformKeyValueToValueListOperation.java @@ -55,7 +55,7 @@ public StreamWrapper apply(KStreamWrapper input, TopologyBuildContext context) { final var vr = streamDataTypeOf(firstSpecificType(mapper, new UserType(new ListType(DataType.UNKNOWN))), false); final var map = userFunctionOf(context, MAPPER_NAME, mapper, subOf(vr), superOf(k), superOf(v)); final var userMap = new UserKeyValueToValueListTransformer(map, tags); - final var storeNames = combineStoreNames(this.storeNames, mapper.storeNames().toArray(TEMPLATE)); + final var storeNames = mapper.storeNames().toArray(String[]::new); final var supplier = new FixedKeyOperationProcessorSupplier<>( name, TransformKeyValueToValueListProcessor::new, diff --git a/ksml/src/main/java/io/axual/ksml/operation/TransformMetadataOperation.java b/ksml/src/main/java/io/axual/ksml/operation/TransformMetadataOperation.java index 8f766978..7b057ac6 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/TransformMetadataOperation.java +++ b/ksml/src/main/java/io/axual/ksml/operation/TransformMetadataOperation.java @@ -54,7 +54,7 @@ public StreamWrapper apply(KStreamWrapper input, TopologyBuildContext context) { final var meta = new UserType(RecordMetadata.DATATYPE); final var map = userFunctionOf(context, MAPPER_NAME, mapper, subOf(meta), superOf(k), superOf(v), superOf(meta)); final var userMap = new UserMetadataTransformer(map, tags); - final var storeNames = combineStoreNames(this.storeNames, mapper.storeNames().toArray(TEMPLATE)); + final var storeNames = mapper.storeNames().toArray(String[]::new); final var supplier = new FixedKeyOperationProcessorSupplier<>( name, TransformMetadataProcessor::new, diff --git a/ksml/src/main/java/io/axual/ksml/operation/TransformValueOperation.java b/ksml/src/main/java/io/axual/ksml/operation/TransformValueOperation.java index 73c55aab..0bdea0d8 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/TransformValueOperation.java +++ b/ksml/src/main/java/io/axual/ksml/operation/TransformValueOperation.java @@ -57,7 +57,7 @@ public StreamWrapper apply(KStreamWrapper input, TopologyBuildContext context) { final var vr = streamDataTypeOf(firstSpecificType(mapper, v.userType()), false); final var map = userFunctionOf(context, MAPPER_NAME, mapper, vr, superOf(k), superOf(v)); final var userMap = new UserValueTransformer(map, tags); - final var storeNames = combineStoreNames(this.storeNames, mapper.storeNames().toArray(TEMPLATE)); + final var storeNames = mapper.storeNames().toArray(String[]::new); final var supplier = new FixedKeyOperationProcessorSupplier<>( name, TransformValueProcessor::new, @@ -89,6 +89,7 @@ public StreamWrapper apply(KTableWrapper input, TopologyBuildContext context) { final ValueTransformerWithKeySupplier supplier = () -> userMap; final var named = namedOf(); final var mat = materializedOf(context, kvStore); + final var storeNames = mapper.storeNames().toArray(String[]::new); final KTable output = named != null ? mat != null ? input.table.transformValues(supplier, mat, named, storeNames) diff --git a/ksml/src/main/java/io/axual/ksml/operation/parser/FilterNotOperationParser.java b/ksml/src/main/java/io/axual/ksml/operation/parser/FilterNotOperationParser.java index 63262994..01712eec 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/parser/FilterNotOperationParser.java +++ b/ksml/src/main/java/io/axual/ksml/operation/parser/FilterNotOperationParser.java @@ -42,10 +42,9 @@ public StructsParser parser() { operationNameField(), functionField(KSMLDSL.Operations.Filter.PREDICATE, "A function that returns \"false\" when records are accepted, \"true\" otherwise", new PredicateDefinitionParser(false)), storeField(false, "Materialized view of the filtered table (only applies to tables, ignored for streams)", StoreType.KEYVALUE_STORE), - storeNamesField(), - (name, pred, store, stores, tags) -> { + (name, pred, store, tags) -> { if (pred != null) - return new FilterNotOperation(storeOperationConfig(name, tags, store, stores), pred); + return new FilterNotOperation(storeOperationConfig(name, tags, store), pred); throw new ExecutionException("Predicate not defined for " + type + " operation"); }); } diff --git a/ksml/src/main/java/io/axual/ksml/operation/parser/FilterOperationParser.java b/ksml/src/main/java/io/axual/ksml/operation/parser/FilterOperationParser.java index b4d93161..af5e043f 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/parser/FilterOperationParser.java +++ b/ksml/src/main/java/io/axual/ksml/operation/parser/FilterOperationParser.java @@ -42,10 +42,9 @@ public StructsParser parser() { operationNameField(), functionField(KSMLDSL.Operations.Filter.PREDICATE, "A function that returns \"true\" when records are accepted, \"false\" otherwise", new PredicateDefinitionParser(false)), storeField(false, "Materialized view of the filtered table (only applies to tables, ignored for streams)", StoreType.KEYVALUE_STORE), - storeNamesField(), - (name, pred, store, stores, tags) -> { + (name, pred, store, tags) -> { if (pred != null) - return new FilterOperation(storeOperationConfig(name, tags, store, stores), pred); + return new FilterOperation(storeOperationConfig(name, tags, store), pred); throw new ExecutionException("Predicate not defined for " + type + " operation"); }); } diff --git a/ksml/src/main/java/io/axual/ksml/operation/parser/ForEachOperationParser.java b/ksml/src/main/java/io/axual/ksml/operation/parser/ForEachOperationParser.java index b04e06c3..f364c03f 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/parser/ForEachOperationParser.java +++ b/ksml/src/main/java/io/axual/ksml/operation/parser/ForEachOperationParser.java @@ -38,7 +38,6 @@ public StructsParser parser() { "Operation to call a function for every record in the stream", operationNameField(), functionField(KSMLDSL.Operations.FOR_EACH, "A function that gets called for every message in the stream", new ForEachActionDefinitionParser(false)), - storeNamesField(), - (name, action, stores, tags) -> action != null ? new ForEachOperation(operationConfig(name, tags, stores), action) : null); + (name, action, tags) -> action != null ? new ForEachOperation(operationConfig(name, tags), action) : null); } } diff --git a/ksml/src/main/java/io/axual/ksml/operation/parser/OperationParser.java b/ksml/src/main/java/io/axual/ksml/operation/parser/OperationParser.java index 568b49b3..b45687f2 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/parser/OperationParser.java +++ b/ksml/src/main/java/io/axual/ksml/operation/parser/OperationParser.java @@ -48,10 +48,6 @@ protected StructsParser operationNameField() { return optional(stringField(KSMLDSL.Operations.NAME_ATTRIBUTE, false, type, "The name of the operation processor")); } - protected StructsParser> storeNamesField() { - return optional(listField(KSMLDSL.Operations.STORE_NAMES_ATTRIBUTE, "store", "state store name", "The names of all state stores used by the function", new StringValueParser())); - } - protected OperationConfig operationConfig(String name, ContextTags tags) { return operationConfig(name, tags, null); } @@ -60,8 +56,7 @@ protected OperationConfig operationConfig(String name, ContextTags tags, List parser() { "Operation to peek into a stream, without modifying the stream contents", operationNameField(), functionField(KSMLDSL.Operations.FOR_EACH, "A function that gets called for every message in the stream", new ForEachActionDefinitionParser(false)), - storeNamesField(), - (name, action, stores, tags) -> new PeekOperation(operationConfig(name, tags, stores), action)); + (name, action, tags) -> new PeekOperation(operationConfig(name, tags), action)); } } diff --git a/ksml/src/main/java/io/axual/ksml/operation/parser/StoreOperationParser.java b/ksml/src/main/java/io/axual/ksml/operation/parser/StoreOperationParser.java index a23b7af3..5176eb79 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/parser/StoreOperationParser.java +++ b/ksml/src/main/java/io/axual/ksml/operation/parser/StoreOperationParser.java @@ -44,12 +44,8 @@ public StoreOperationParser(String type, TopologyResources resources) { } protected StoreOperationConfig storeOperationConfig(String name, ContextTags tags, StateStoreDefinition store) { - return storeOperationConfig(name, tags, store, null); - } - - protected StoreOperationConfig storeOperationConfig(String name, ContextTags tags, StateStoreDefinition store, List storeNames) { name = validateName("Store", name, defaultShortName(), true); - return new StoreOperationConfig(name != null ? resources().getUniqueOperationName(name) : resources().getUniqueOperationName(tags), tags, store, storeNames); + return new StoreOperationConfig(name != null ? resources().getUniqueOperationName(name) : resources().getUniqueOperationName(tags), tags, store); } protected StructsParser storeField(boolean required, String doc, StoreType expectedStoreType) { diff --git a/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyOperationParser.java b/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyOperationParser.java index 55ec3abc..6de24116 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyOperationParser.java +++ b/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyOperationParser.java @@ -40,7 +40,6 @@ protected StructsParser parser() { "Convert the key of every record in the stream to another key", operationNameField(), functionField(KSMLDSL.Operations.Transform.MAPPER, "A function that computes a new key for each record", new KeyTransformerDefinitionParser(false)), - storeNamesField(), - (name, mapper, storeNames, tags) -> new TransformKeyOperation(operationConfig(name, tags, storeNames), mapper)); + (name, mapper, tags) -> new TransformKeyOperation(operationConfig(name, tags), mapper)); } } diff --git a/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyValueOperationParser.java b/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyValueOperationParser.java index ca23868f..f784ecec 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyValueOperationParser.java +++ b/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyValueOperationParser.java @@ -40,7 +40,6 @@ protected StructsParser parser() { "Convert the key/value of every record in the stream to another key/value", operationNameField(), functionField(KSMLDSL.Operations.Transform.MAPPER, "A function that computes a new key/value for each record", new KeyValueTransformerDefinitionParser(false)), - storeNamesField(), - (name, mapper, storeNames, tags) -> new TransformKeyValueOperation(operationConfig(name, tags, storeNames), mapper)); + (name, mapper, tags) -> new TransformKeyValueOperation(operationConfig(name, tags), mapper)); } } diff --git a/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyValueToKeyValueListOperationParser.java b/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyValueToKeyValueListOperationParser.java index 63a36204..89bd0267 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyValueToKeyValueListOperationParser.java +++ b/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyValueToKeyValueListOperationParser.java @@ -40,7 +40,6 @@ protected StructsParser parser() { "Convert a stream by transforming every record into a list of derived records", operationNameField(), functionField(KSMLDSL.Operations.Transform.MAPPER, "A function that converts every record of a stream to a list of output records.", new KeyValueToKeyValueListTransformerDefinitionParser(false)), - storeNamesField(), - (name, mapper, storeNames, tags) -> new TransformKeyValueToKeyValueListOperation(operationConfig(name, tags, storeNames), mapper)); + (name, mapper, tags) -> new TransformKeyValueToKeyValueListOperation(operationConfig(name, tags), mapper)); } } diff --git a/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyValueToValueListOperationParser.java b/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyValueToValueListOperationParser.java index e5590ca0..4201652c 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyValueToValueListOperationParser.java +++ b/ksml/src/main/java/io/axual/ksml/operation/parser/TransformKeyValueToValueListOperationParser.java @@ -40,7 +40,6 @@ protected StructsParser parser() { "Convert every record in the stream to a list of output records with the same key", operationNameField(), functionField(KSMLDSL.Operations.Transform.MAPPER, "A function that converts every key/value into a list of result values, each of which will be combined with the original key to form a new message in the output stream", new KeyValueToValueListTransformerDefinitionParser(false)), - storeNamesField(), - (name, mapper, storeNames, tags) -> new TransformKeyValueToValueListOperation(operationConfig(name, tags, storeNames), mapper)); + (name, mapper, tags) -> new TransformKeyValueToValueListOperation(operationConfig(name, tags), mapper)); } } diff --git a/ksml/src/main/java/io/axual/ksml/operation/parser/TransformMetadataOperationParser.java b/ksml/src/main/java/io/axual/ksml/operation/parser/TransformMetadataOperationParser.java index f3a63163..492513b3 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/parser/TransformMetadataOperationParser.java +++ b/ksml/src/main/java/io/axual/ksml/operation/parser/TransformMetadataOperationParser.java @@ -39,7 +39,6 @@ protected StructsParser parser() { "Convert the metadata of every record in the stream", operationNameField(), functionField(KSMLDSL.Operations.Transform.MAPPER, "A function that converts the metadata (Kafka headers, timestamp) of every record in the stream", new MetadataTransformerDefinitionParser(false)), - storeNamesField(), - (name, mapper, storeNames, tags) -> new TransformMetadataOperation(operationConfig(name, tags, storeNames), mapper)); + (name, mapper, tags) -> new TransformMetadataOperation(operationConfig(name, tags), mapper)); } } diff --git a/ksml/src/main/java/io/axual/ksml/operation/parser/TransformValueOperationParser.java b/ksml/src/main/java/io/axual/ksml/operation/parser/TransformValueOperationParser.java index a2efdd6c..eaaac2b1 100644 --- a/ksml/src/main/java/io/axual/ksml/operation/parser/TransformValueOperationParser.java +++ b/ksml/src/main/java/io/axual/ksml/operation/parser/TransformValueOperationParser.java @@ -42,7 +42,6 @@ protected StructsParser parser() { operationNameField(), functionField(KSMLDSL.Operations.Transform.MAPPER, "A function that converts the value of every record into another value", new ValueTransformerDefinitionParser(false)), storeField(false, "Materialized view of the transformed table (only applies to tables, ignored for streams)", StoreType.KEYVALUE_STORE), - storeNamesField(), - (name, mapper, store, storeNames, tags) -> new TransformValueOperation(storeOperationConfig(name, tags, store, storeNames), mapper)); + (name, mapper, store, tags) -> new TransformValueOperation(storeOperationConfig(name, tags, store), mapper)); } }