将事件滚动到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 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编程指南。

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

  1. 阅读输入github_events数据
  2. 进入1分钟固定窗口的窗口,允许延迟数据
  3. 计数每次窗口事件
  4. 将结果输出到github_events_rollup_minute

windowwordcount示例项目演示了此模式。

最新更新