有没有办法让 Pub/Sub -> Dataflow -> BigQuery 模板处理每条消息的多个记录?

Posted

技术标签:

【中文标题】有没有办法让 Pub/Sub -> Dataflow -> BigQuery 模板处理每条消息的多个记录?【英文标题】:Is there a way to get the Pub/Sub -> Dataflow -> BigQuery template to cope with multiple records per message? 【发布时间】:2021-11-20 14:49:22 【问题描述】:

我有一些应用程序向 Pub/Sub 发布消息,每条消息将包含一个或多个事件。例如


  ...pub/sub headers...
  "data": "\"event\":\"event1\",\"key1\":\"value1\",\"key2\":\"value2\"\n\"event\":\"event2\",\"key1\":\"value1\",\"key2\":\"value2\"\n\"event\":\"event3\",\"key1\":\"value1\",\"key2\":\"value2\""

我希望在 BigQuery 中得到如下数据:

event  | key1   | key2
event1 | value1 | value2
event2 | value1 | value2
event3 | value1 | value2

我需要将这些事件存储在 BigQuery 中,并且可用的模板看起来应该非常合适。但是,我陷入了问题的“更多”事件部分。

我有一个非常简单的 javascript UDF,它对入站消息进行了一些预处理,但我一生都无法弄清楚什么格式(如果有的话)将使 Dataflow 的其余部分工作对该 UDF 的输出表示要保存到 BigQuery 的多条记录这一事实感到高兴。

在不创建自定义数据流作业的情况下,我正在尝试的事情是否可行?

【问题讨论】:

【参考方案1】:

在 PubSub to Bigquery 数据流模板中,它需要一个条目并写入 1 个对应的行。你不能扇出行数(我没试过,但在代码中,这似乎是不可能的)。

您可以构建自定义数据流(您可以从 existing template 开始。

或者,这是首选方式,您可以使用 bigquery 查询对数据流管道进行后期处理。

【讨论】:

感谢您的确认。我同样害怕。感谢您的反馈!

以上是关于有没有办法让 Pub/Sub -> Dataflow -> BigQuery 模板处理每条消息的多个记录?的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Functions 无法使用 Pub/Sub 死信主题

拉取请求上的 GCP Pub/Sub 过滤

列出 Pub/Sub 订阅使用者

Pub/Sub:似乎无法让本地模拟器与 Node.js 一起使用

Spring Data Redis—Pub/Sub(附Web项目源码) (转)

Spring Data Redis—Pub/Sub(附Web项目源码)