Class SliceAssigners.SlicedSharedSliceAssigner
java.lang.Object
org.apache.flink.table.runtime.operators.window.tvf.slicing.SliceAssigners.SlicedSharedSliceAssigner
- All Implemented Interfaces:
Serializable,WindowAssigner,SliceAssigner,SliceSharedAssigner
- Enclosing class:
- SliceAssigners
public static final class SliceAssigners.SlicedSharedSliceAssigner
extends Object
implements SliceSharedAssigner
The
SliceAssigner for elements have been attached slice end timestamp, and the slices
are shared.- See Also:
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionSlicedSharedSliceAssigner(int sliceEndIndex, SliceSharedAssigner innerAssigner) -
Method Summary
Modifier and TypeMethodDescriptionlongassignSliceEnd(org.apache.flink.table.data.RowData element, ClockService clock) Returns the end timestamp of a slice that the given element should belong.org.apache.flink.api.common.state.v2.StateFuture<org.apache.flink.api.java.tuple.Tuple2<org.apache.flink.table.data.RowData,org.apache.flink.table.data.RowData>> asyncMergeSlices(long sliceEnd, AsyncMergeCallback<Long, Iterable<Long>> callback) Determines which slices (if any) should be merged and then merge them.expiredSlices(long windowEnd) Returns an iterator of slices to expire when the given window is emitted.Returns a description of this window assigner.longgetLastWindowEnd(long sliceEnd) Returns the last window which the slice belongs to.longReturns the interval of slice ends, i.e. the step size to advance of the slice end when a new slice assigned.longgetWindowStart(long windowEnd) Returns the corresponding window start timestamp of the given window end timestamp.booleanReturnstrueif elements are assigned to windows based on event time,falsebased on processing time.voidmergeSlices(long sliceEnd, MergeCallback<Long, Iterable<Long>> callback) Determines which slices (if any) should be merged and then merge them.nextTriggerWindow(long windowEnd, Supplier<Boolean> isWindowEmpty) Returns the optional end timestamp of next window which should be triggered.nextTriggerWindow(long windowEnd, org.apache.flink.table.data.RowData acc, Function<org.apache.flink.table.data.RowData, Boolean> isWindowEmpty) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.flink.table.runtime.operators.window.tvf.slicing.SliceAssigner
assignSliceEnd, expiredSlices, getSliceEndInterval, getWindowStartMethods inherited from interface org.apache.flink.table.runtime.operators.window.tvf.common.WindowAssigner
isEventTime
-
Field Details
-
innerAssigner
-
-
Constructor Details
-
Method Details
-
mergeSlices
public void mergeSlices(long sliceEnd, MergeCallback<Long, Iterable<Long>> callback) throws ExceptionDescription copied from interface:SliceSharedAssignerDetermines which slices (if any) should be merged and then merge them.- Specified by:
mergeSlicesin interfaceSliceSharedAssigner- Parameters:
sliceEnd- the triggered slice, identified by end timestampcallback- a callback that can be invoked to signal which slices should be merged.- Throws:
Exception
-
asyncMergeSlices
public org.apache.flink.api.common.state.v2.StateFuture<org.apache.flink.api.java.tuple.Tuple2<org.apache.flink.table.data.RowData,org.apache.flink.table.data.RowData>> asyncMergeSlices(long sliceEnd, AsyncMergeCallback<Long, Iterable<Long>> callback) throws ExceptionDescription copied from interface:SliceSharedAssignerDetermines which slices (if any) should be merged and then merge them.- Specified by:
asyncMergeSlicesin interfaceSliceSharedAssigner- Parameters:
sliceEnd- the triggered slice, identified by end timestampcallback- a callback that can be invoked to signal which slices should be merged.- Returns:
- f0 is the accumulators after merging, f1 is the result of the aggregation from the merged accumulators with this slice end as namespace
- Throws:
Exception
-
nextTriggerWindow
Description copied from interface:SliceSharedAssignerReturns the optional end timestamp of next window which should be triggered. Empty if no following window to trigger for now.The purpose of this method is avoid register too many timers for each hopping and cumulative slice, e.g. HOP(1day, 10s) needs register 8640 timers for every slice. In order to improve this, we only register one timer for the next window. For hopping windows we don't register next window if current window is empty (i.e. no records in current window). That means we will have one more unnecessary window triggered for hopping windows if no elements arrives for a key for a long time. We will skip to emit window result for the triggered empty window, see
AsyncStateSliceSharedWindowAggProcessor#fireWindow(Long, Long).- Specified by:
nextTriggerWindowin interfaceSliceSharedAssigner- Parameters:
windowEnd- the current triggered window, identified by end timestampisWindowEmpty- a supplier that can be invoked to get whether the triggered window is empty (i.e. no records in the window).
-
nextTriggerWindow
public Optional<Long> nextTriggerWindow(long windowEnd, org.apache.flink.table.data.RowData acc, Function<org.apache.flink.table.data.RowData, Boolean> isWindowEmpty) - Specified by:
nextTriggerWindowin interfaceSliceSharedAssigner
-
getLastWindowEnd
public long getLastWindowEnd(long sliceEnd) Description copied from interface:SliceAssignerReturns the last window which the slice belongs to. The window and slices are both identified by the end timestamp.- Specified by:
getLastWindowEndin interfaceSliceAssigner
-
getDescription
Description copied from interface:WindowAssignerReturns a description of this window assigner.- Specified by:
getDescriptionin interfaceWindowAssigner
-
assignSliceEnd
Description copied from interface:SliceAssignerReturns the end timestamp of a slice that the given element should belong.- Specified by:
assignSliceEndin interfaceSliceAssigner- Parameters:
element- the element to which slice should belong to.clock- the service to get current processing time.
-
getWindowStart
public long getWindowStart(long windowEnd) Description copied from interface:SliceAssignerReturns the corresponding window start timestamp of the given window end timestamp.- Specified by:
getWindowStartin interfaceSliceAssigner
-
expiredSlices
Description copied from interface:SliceAssignerReturns an iterator of slices to expire when the given window is emitted. The window and slices are both identified by the end timestamp.- Specified by:
expiredSlicesin interfaceSliceAssigner- Parameters:
windowEnd- the end timestamp of window emitted.
-
getSliceEndInterval
public long getSliceEndInterval()Description copied from interface:SliceAssignerReturns the interval of slice ends, i.e. the step size to advance of the slice end when a new slice assigned.- Specified by:
getSliceEndIntervalin interfaceSliceAssigner
-
isEventTime
public boolean isEventTime()Description copied from interface:WindowAssignerReturnstrueif elements are assigned to windows based on event time,falsebased on processing time.- Specified by:
isEventTimein interfaceWindowAssigner
-