所以,我有一个带有此结构的数据流(我很抱歉,它在SQL中(
CREATE TABLE github_events
(
event_id bigint,
event_type text,
event_public boolean,
repo_id bigint,
payload jsonb,
repo jsonb,
user_id bigint,
org jsonb,
created_at timestamp
);
在sql中,我会将这些数据汇总到这样的一分钟:
1.为此目的创建汇总表:
CREATE TABLE github_events_rollup_minute
(
created_at timestamp,
event_count bigint
);
2.填充插入/选择:
INSERT INTO github_events_rollup_minute(
created_at,
event_count
)
SELECT
date_trunc('minute', created_at) AS created_at,
COUNT(*)the AS event_count
FROM github_events
GROUP BY 1;
在Apache Beam中,我试图将事件汇总到一分钟,即根据事件的时间戳字段来计算该分钟内收到的事件的总数。
Timestamp(in YYYY-MM-DDThh:mm): event_count
因此,如果我们收到更多具有相同重叠时间戳的事件(由于客户可能会脱机的事件延迟(,我们只需要进行汇总计数并为此增加计数时间戳。
这将允许我们简单地通过应用程序中的event_count
增加YYYY-MM-DDThh:mm
的计数。
假设事件可能会延迟,但它们将始终具有timestamp
字段。
我想在Apache Beam中完成同样的事情。我对Apache Beam非常陌生,我觉得我缺少一些可以让我完成此操作的东西。我已经多次阅读了Apache Beam编程指南。
查看窗口和触发器上的部分。您所描述的是带有允许延迟数据的固定时间窗口。管道的一般形状听起来像:
- 阅读输入
github_events
数据 - 进入1分钟固定窗口的窗口,允许延迟数据
- 计数每次窗口事件
- 将结果输出到
github_events_rollup_minute
windowwordcount示例项目演示了此模式。