Skip to main content

Module streaming_tvf

Module streaming_tvf 

Source
Expand description

Streaming window table-valued functions: TUMBLE, HOP, SESSION.

Rewrites Flink-SQL-style window TVF syntax into standard SQL that uses the existing tumble_start/tumble_end/hop_start/hop_end/session_start/ session_end scalar UDFs registered by window_functions.rs.

§Syntax (FROM clause)

-- Tumbling window: each event appears in exactly one window
SELECT key, window_start, window_end, COUNT(*)
FROM TUMBLE(TABLE events, DESCRIPTOR(ts), 60000)
GROUP BY key, window_start, window_end

-- Hopping / sliding window: each event appears in (size/slide) windows
SELECT key, window_start, window_end, COUNT(*)
FROM HOP(TABLE events, DESCRIPTOR(ts), 30000, 60000)
GROUP BY key, window_start, window_end

-- Session window: gaps between events delimit window boundaries
SELECT key, window_start, window_end, COUNT(*)
FROM SESSION(TABLE events, DESCRIPTOR(ts), 5000)
GROUP BY key, window_start, window_end

§Interval expressions

The size / slide / gap argument can be:

  • An integer literal (milliseconds): 60000
  • A SQL interval string: '1 minute', '30 seconds', '1 hour' → converted to ms

§Rewrite output

-- TUMBLE → subquery with window_start / window_end columns:
SELECT key, window_start, window_end, COUNT(*)
FROM (
  SELECT *, tumble_start(ts, 60000) AS window_start,
            tumble_end(ts, 60000)   AS window_end
  FROM events
) AS _tvf_window
GROUP BY key, window_start, window_end

Enums§

WindowTvf
Parsed form of a window TVF call.

Functions§

find_window_tvf
Scan sql for the first occurrence of a window TVF in a FROM clause and return (pre, tvf, post) where pre + rewrite(tvf) + post produces the final SQL. Returns None if no TVF is found.
rewrite_window_tvfs
Rewrite all window TVF calls in sql to subquery form. Iterates until no more TVFs are found (handles multiple TVFs in one query).