gpt4 book ai didi

google-bigquery - 在 Apache Beam 中维护全局状态

转载 作者:行者123 更新时间:2023-12-01 12:12:41 26 4
gpt4 key购买 nike

我们有一个 PubSub 主题,事件沉入 BigQuery(尽管特定的数据库在这里几乎无关紧要)。事件可能带有新的未知属性,这些属性最终应该作为单独的 BigQuery 列结束。

所以,基本上我有两个问题:

  1. 在 Pipeline 中维护全局状态的正确方法是什么(在我的案例中使用了一组遇到的属性)?
  2. 一旦遇到新属性并直到执行ALTER TABLE,缓冲/保持事件流的好策略是什么

现在我尝试使用以下(我正在使用 Spotify scio):

rows
.withFixedWindows(Duration.millis(duration))
.withWindow[IntervalWindow]
.swap
.groupByKey
.map { case (window, rowsIterable) =>
val newRows = findNewProperties(rowsIterable)
mutateTableWith(newRows)
rowsIterable
}
.flatMap(id)
.saveAsBigQuery()

但这非常低效,因为我们至少需要将整个 rowsIterable 加载到内存中,甚至遍历它。

最佳答案

我们正在构建完全相同的项目,我们正在关注 this approach带有包含模式的刷新侧输入(从 BQ 每隔一段时间刷新一次)。所以基本上:

  1. 在侧面输入从 BQ 加载模式
  2. 使用流模式将数据流式传输到 BQ,这样您就可以对插入失败的行执行其他操作(即:当它们具有新的未知属性时)
  3. 将那些失败的保存到其他地方(数据存储?)以便稍后处理它们(例如,在另一项工作中)
  4. 该恢复作业将发布架构更改,最终将由主管道刷新端输入加载(第 1 步)。

我有一个使用令人耳目一新的侧输入方法的工作示例 here

关于google-bigquery - 在 Apache Beam 中维护全局状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50630560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com