blob: 0d424bd65ff0145dbb1de00547b1d15c60bf84ed [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.flink.table.descriptors
/**
* A trait for descriptors that allow to convert between a dynamic table and an external connector.
*/
trait StreamableDescriptor[D <: StreamableDescriptor[D]] extends TableDescriptor {
/**
* Declares how to perform the conversion between a dynamic table and an external connector.
*
* In append mode, a dynamic table and an external connector only exchange INSERT messages.
*
* @see See also [[inRetractMode()]] and [[inUpsertMode()]].
*/
def inAppendMode(): D
/**
* Declares how to perform the conversion between a dynamic table and an external connector.
*
* In retract mode, a dynamic table and an external connector exchange ADD and RETRACT messages.
*
* An INSERT change is encoded as an ADD message, a DELETE change as a RETRACT message, and an
* UPDATE change as a RETRACT message for the updated (previous) row and an ADD message for
* the updating (new) row.
*
* In this mode, a key must not be defined as opposed to upsert mode. However, every update
* consists of two messages which is less efficient.
*
* @see See also [[inAppendMode()]] and [[inUpsertMode()]].
*/
def inRetractMode(): D
/**
* Declares how to perform the conversion between a dynamic table and an external connector.
*
* In upsert mode, a dynamic table and an external connector exchange UPSERT and DELETE messages.
*
* This mode requires a (possibly composite) unique key by which updates can be propagated. The
* external connector needs to be aware of the unique key attribute in order to apply messages
* correctly. INSERT and UPDATE changes are encoded as UPSERT messages. DELETE changes as
* DELETE messages.
*
* The main difference to a retract stream is that UPDATE changes are encoded with a single
* message and are therefore more efficient.
*
* @see See also [[inAppendMode()]] and [[inRetractMode()]].
*/
def inUpsertMode(): D
}