Google bigquery 在Apache Beam中维护全局状态
我们有一个PubSub主题,其中的事件沉入BigQuery(尽管特定的DB在这里几乎不相关)。事件可能带有新的未知属性,这些属性最终将作为单独的BigQuery列结束 基本上我有两个问题:Google bigquery 在Apache Beam中维护全局状态,google-bigquery,google-cloud-dataflow,apache-beam,google-cloud-pubsub,spotify-scio,Google Bigquery,Google Cloud Dataflow,Apache Beam,Google Cloud Pubsub,Spotify Scio,我们有一个PubSub主题,其中的事件沉入BigQuery(尽管特定的DB在这里几乎不相关)。事件可能带有新的未知属性,这些属性最终将作为单独的BigQuery列结束 基本上我有两个问题: 在管道中维护全局状态的正确方法是什么(在我的例子中是一组遇到的属性) 在遇到新属性并执行ALTER TABLE之前,缓冲/保存事件流的好策略是什么 现在,我尝试使用以下内容(我正在使用Spotify scio): 但这是非常低效的,因为我们至少需要将整个rowsIterable加载到内存中,甚至遍历它。我们正
ALTER TABLE
之前,缓冲/保存事件流的好策略是什么但这是非常低效的,因为我们至少需要将整个
rowsIterable
加载到内存中,甚至遍历它。我们正在构建同一个项目,并且我们正在使用包含模式的刷新侧输入(从BQ开始每隔一段时间刷新)。所以基本上:
rows
.withFixedWindows(Duration.millis(duration))
.withWindow[IntervalWindow]
.swap
.groupByKey
.map { case (window, rowsIterable) =>
val newRows = findNewProperties(rowsIterable)
mutateTableWith(newRows)
rowsIterable
}
.flatMap(id)
.saveAsBigQuery()