在Apache Beam中将事件卷起一分钟

时间:2018-03-26 08:14:52

标签: apache-beam

所以,我有一个具有这种结构的数据流(我在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

1 个答案:

答案 0 :(得分:1)

查看WindowingTriggers上的各个部分。您所描述的是具有允许的延迟数据的固定时间窗口。管道的一般形状听起来像:

  1. 阅读输入github_events数据
  2. 窗口进入1分钟的固定窗口,允许延迟数据
  3. 按窗口计算事件
  4. 将结果输出到github_events_rollup_minute
  5. WindowedWordCount示例项目演示了这种模式。