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 Details

  • Constructor Details

    • SlicedSharedSliceAssigner

      public SlicedSharedSliceAssigner(int sliceEndIndex, SliceSharedAssigner innerAssigner)
  • Method Details

    • mergeSlices

      public void mergeSlices(long sliceEnd, MergeCallback<Long,Iterable<Long>> callback) throws Exception
      Description copied from interface: SliceSharedAssigner
      Determines which slices (if any) should be merged and then merge them.
      Specified by:
      mergeSlices in interface SliceSharedAssigner
      Parameters:
      sliceEnd - the triggered slice, identified by end timestamp
      callback - 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 Exception
      Description copied from interface: SliceSharedAssigner
      Determines which slices (if any) should be merged and then merge them.
      Specified by:
      asyncMergeSlices in interface SliceSharedAssigner
      Parameters:
      sliceEnd - the triggered slice, identified by end timestamp
      callback - 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

      public Optional<Long> nextTriggerWindow(long windowEnd, Supplier<Boolean> isWindowEmpty)
      Description copied from interface: SliceSharedAssigner
      Returns 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:
      nextTriggerWindow in interface SliceSharedAssigner
      Parameters:
      windowEnd - the current triggered window, identified by end timestamp
      isWindowEmpty - 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:
      nextTriggerWindow in interface SliceSharedAssigner
    • getLastWindowEnd

      public long getLastWindowEnd(long sliceEnd)
      Description copied from interface: SliceAssigner
      Returns the last window which the slice belongs to. The window and slices are both identified by the end timestamp.
      Specified by:
      getLastWindowEnd in interface SliceAssigner
    • getDescription

      public String getDescription()
      Description copied from interface: WindowAssigner
      Returns a description of this window assigner.
      Specified by:
      getDescription in interface WindowAssigner
    • assignSliceEnd

      public long assignSliceEnd(org.apache.flink.table.data.RowData element, ClockService clock)
      Description copied from interface: SliceAssigner
      Returns the end timestamp of a slice that the given element should belong.
      Specified by:
      assignSliceEnd in interface SliceAssigner
      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: SliceAssigner
      Returns the corresponding window start timestamp of the given window end timestamp.
      Specified by:
      getWindowStart in interface SliceAssigner
    • expiredSlices

      public Iterable<Long> expiredSlices(long windowEnd)
      Description copied from interface: SliceAssigner
      Returns 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:
      expiredSlices in interface SliceAssigner
      Parameters:
      windowEnd - the end timestamp of window emitted.
    • getSliceEndInterval

      public long getSliceEndInterval()
      Description copied from interface: SliceAssigner
      Returns the interval of slice ends, i.e. the step size to advance of the slice end when a new slice assigned.
      Specified by:
      getSliceEndInterval in interface SliceAssigner
    • isEventTime

      public boolean isEventTime()
      Description copied from interface: WindowAssigner
      Returns true if elements are assigned to windows based on event time, false based on processing time.
      Specified by:
      isEventTime in interface WindowAssigner