2 个回答
处理窗口中的迟到数据(Late Data)需要结合水印(Watermark)、延迟容忍(Allowed Lateness)和侧输出(Side Output)机制。
1、水印和延迟容忍
1、水印和延迟容忍
-- 定义事件时间字段和水印(允许5秒延迟)
CREATE TABLE orders (
order_id STRING,
amount DOUBLE,
event_time TIMESTAMP(3),
WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND
) WITH (...);
-- 窗口配置(允许延迟5秒)
SELECT
TUMBLE_START(event_time, INTERVAL '1' MINUTE) AS window_start,
SUM(amount) AS total_amount
FROM orders
GROUP BY
TUMBLE(event_time, INTERVAL '1' MINUTE)
-- 允许窗口触发后5秒内接受迟到数据
WITHIN INTERVAL '1' MINUTE
ALLOWED_LATENESS INTERVAL '5' SECOND;
发布于:1周前 (05-28) IP属地:
2、侧输出
-- 定义侧输出标签
DEFINE LATE_DATA_OUTPUT TAG 'late_data';
-- 主查询(主窗口计算)
SELECT
TUMBLE_START(event_time, INTERVAL '1' MINUTE) AS window_start,
SUM(amount) AS total_amount
FROM orders
GROUP BY
TUMBLE(event_time, INTERVAL '1' MINUTE)
-- 允许延迟5秒
WITHIN INTERVAL '1' MINUTE
ALLOWED_LATENESS INTERVAL '5' SECOND
-- 侧输出迟到数据
OUTPUT LATE_DATA_OUTPUT;
-- 查询侧输出流
SELECT * FROM LATE_DATA_OUTPUT;
发布于:1周前 (05-28) IP属地:
我来回答
您需要 登录 后回答此问题!