所以,我有一个具有这种结构的数据流(我在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 / SELECT填充:
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
因此,如果我们收到更多具有相同重叠时间戳的事件(由于事件接收延迟,因为客户可能处于脱机状态),稍后在管道中,我们只需要采用累计计数并增加计数时间戳。
这样我们就可以在应用程序中简单地增加YYYY-MM-DDThh:mm
的{{1}}计数。
假设事件可能会延迟,但它们始终会有event_count
字段。
我想在Apache Beam中完成同样的事情。我对Apache Beam很新,我觉得我在Beam中缺少一些可以让我完成这项任务的东西。我多次阅读Apache Beam Programming Guide。
答案 0 :(得分:1)
查看Windowing和Triggers上的各个部分。您所描述的是具有允许的延迟数据的固定时间窗口。管道的一般形状听起来像:
github_events
数据github_events_rollup_minute
WindowedWordCount示例项目演示了这种模式。