Class SortMergeJoinOperator
- java.lang.Object
-
- org.apache.flink.streaming.api.operators.AbstractStreamOperator<OUT>
-
- org.apache.flink.table.runtime.operators.TableStreamOperator<RowData>
-
- org.apache.flink.table.runtime.operators.join.SortMergeJoinOperator
-
- All Implemented Interfaces:
Serializable
,CheckpointListener
,BoundedMultiInput
,KeyContext
,KeyContextHandler
,StreamOperator<RowData>
,StreamOperatorStateHandler.CheckpointedStreamOperator
,TwoInputStreamOperator<RowData,RowData,RowData>
,YieldingOperator<RowData>
public class SortMergeJoinOperator extends TableStreamOperator<RowData> implements TwoInputStreamOperator<RowData,RowData,RowData>, BoundedMultiInput
An implementation that realizes the joining through a sort-merge join strategy. 1.In most cases, its performance is weaker than HashJoin. 2.It is more stable than HashJoin, and most of the data can be sorted stably. 3.SortMergeJoin should be the best choice if sort can be omitted in the case of multi-level join cascade with the same key.NOTE: SEMI and ANTI join output input1 instead of input2. (Contrary to
HashJoinOperator
).- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.flink.table.runtime.operators.TableStreamOperator
TableStreamOperator.ContextImpl
-
-
Field Summary
-
Fields inherited from class org.apache.flink.table.runtime.operators.TableStreamOperator
ctx, currentWatermark
-
Fields inherited from class org.apache.flink.streaming.api.operators.AbstractStreamOperator
config, lastRecordAttributes1, lastRecordAttributes2, latencyStats, LOG, metrics, output, processingTimeService, stateHandler, stateKeySelector1, stateKeySelector2, timeServiceManager
-
-
Constructor Summary
Constructors Constructor Description SortMergeJoinOperator(SortMergeJoinFunction sortMergeJoinFunction)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
This method is called at the very end of the operator's life, both in the case of a successful completion of the operation, and in the case of a failure and canceling.void
endInput(int inputId)
It is notified that no more data will arrive from the input identified by theinputId
.void
open()
This method is called immediately before any elements are processed, it should contain the operator's initialization logic, e.g. state initialization.void
processElement1(StreamRecord<RowData> element)
Processes one element that arrived on the first input of this two-input operator.void
processElement2(StreamRecord<RowData> element)
Processes one element that arrived on the second input of this two-input operator.-
Methods inherited from class org.apache.flink.table.runtime.operators.TableStreamOperator
computeMemorySize, processWatermark, useSplittableTimers
-
Methods inherited from class org.apache.flink.streaming.api.operators.AbstractStreamOperator
finish, getContainingTask, getCurrentKey, getExecutionConfig, getInternalTimerService, getKeyedStateBackend, getKeyedStateStore, getMetricGroup, getOperatorConfig, getOperatorID, getOperatorName, getOperatorStateBackend, getOrCreateKeyedState, getPartitionedState, getPartitionedState, getProcessingTimeService, getRuntimeContext, getStateKeySelector1, getStateKeySelector2, getTimeServiceManager, getUserCodeClassloader, hasKeyContext1, hasKeyContext2, initializeState, initializeState, isUsingCustomRawKeyedState, notifyCheckpointAborted, notifyCheckpointComplete, prepareSnapshotPreBarrier, processLatencyMarker, processLatencyMarker1, processLatencyMarker2, processRecordAttributes, processRecordAttributes1, processRecordAttributes2, processWatermark1, processWatermark2, processWatermarkStatus, processWatermarkStatus1, processWatermarkStatus2, reportOrForwardLatencyMarker, setCurrentKey, setKeyContextElement1, setKeyContextElement2, setMailboxExecutor, setProcessingTimeService, setup, snapshotState, snapshotState
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.flink.api.common.state.CheckpointListener
notifyCheckpointAborted, notifyCheckpointComplete
-
Methods inherited from interface org.apache.flink.streaming.api.operators.KeyContext
getCurrentKey, setCurrentKey
-
Methods inherited from interface org.apache.flink.streaming.api.operators.KeyContextHandler
hasKeyContext
-
Methods inherited from interface org.apache.flink.streaming.api.operators.StreamOperator
finish, getMetricGroup, getOperatorAttributes, getOperatorID, initializeState, prepareSnapshotPreBarrier, setKeyContextElement1, setKeyContextElement2, snapshotState
-
Methods inherited from interface org.apache.flink.streaming.api.operators.TwoInputStreamOperator
processLatencyMarker1, processLatencyMarker2, processRecordAttributes1, processRecordAttributes2, processWatermark1, processWatermark2, processWatermarkStatus1, processWatermarkStatus2
-
-
-
-
Constructor Detail
-
SortMergeJoinOperator
public SortMergeJoinOperator(SortMergeJoinFunction sortMergeJoinFunction)
-
-
Method Detail
-
open
public void open() throws Exception
Description copied from class:AbstractStreamOperator
This method is called immediately before any elements are processed, it should contain the operator's initialization logic, e.g. state initialization.The default implementation does nothing.
- Specified by:
open
in interfaceStreamOperator<RowData>
- Overrides:
open
in classTableStreamOperator<RowData>
- Throws:
Exception
- An exception in this method causes the operator to fail.
-
processElement1
public void processElement1(StreamRecord<RowData> element) throws Exception
Description copied from interface:TwoInputStreamOperator
Processes one element that arrived on the first input of this two-input operator. This method is guaranteed to not be called concurrently with other methods of the operator.- Specified by:
processElement1
in interfaceTwoInputStreamOperator<RowData,RowData,RowData>
- Throws:
Exception
-
processElement2
public void processElement2(StreamRecord<RowData> element) throws Exception
Description copied from interface:TwoInputStreamOperator
Processes one element that arrived on the second input of this two-input operator. This method is guaranteed to not be called concurrently with other methods of the operator.- Specified by:
processElement2
in interfaceTwoInputStreamOperator<RowData,RowData,RowData>
- Throws:
Exception
-
endInput
public void endInput(int inputId) throws Exception
Description copied from interface:BoundedMultiInput
It is notified that no more data will arrive from the input identified by theinputId
. TheinputId
is numbered starting from 1, and `1` indicates the first input.WARNING: It is not safe to use this method to commit any transactions or other side effects! You can use this method to e.g. flush data buffered for the given input or implement an ordered reading from multiple inputs via
InputSelectable
.- Specified by:
endInput
in interfaceBoundedMultiInput
- Throws:
Exception
-
close
public void close() throws Exception
Description copied from interface:StreamOperator
This method is called at the very end of the operator's life, both in the case of a successful completion of the operation, and in the case of a failure and canceling.This method is expected to make a thorough effort to release all resources that the operator has acquired.
NOTE:It can not emit any records! If you need to emit records at the end of processing, do so in the
StreamOperator.finish()
method.- Specified by:
close
in interfaceStreamOperator<RowData>
- Overrides:
close
in classAbstractStreamOperator<RowData>
- Throws:
Exception
-
-