想象一下一个简单的Google数据流管道。在这个管道中,您使用apachebeam函数从BQ读取数据,根据返回的pcollection,您必须更新这些行
Journeys = (p
| 'Read from BQ' >> beam.io.Read(
beam.io.BigQuerySource(query=query, dataset="dataset", use_standard_sql=True)))
Update = ( Journeys
| 'Updating Journey Table' >> beam.Map(UpdateBQ))
Write = (Journeys
| 'Write transform to BigQuery' >> WriteToBigQuery('table', TABLE_SCHEMA_CANONICAL))
此管道的问题是,当您读取表时,会对返回的pcollection中的每个项执行UpdateBQ(光束。地图)在
对BigQuery表执行更新的更好方法是什么?
我想这不需要使用光束。地图只执行和更新一次处理所有输入pcollection。在
额外
^{pr2}$可能的解决方案
with beam.Pipeline(options=options) as p:
Journeys = (p
| 'Read from BQ' >> beam.io.Read(
beam.io.BigQuerySource(query=query, dataset="dataset", use_standard_sql=True))
)
Write = (Journeys
| 'Write transform to BigQuery' >> WriteToBigQuery('table', TABLE_SCHEMA_CANONICAL))
UpdateBQ();
在阅读BQ之后,您是否使用beam管道进行进一步的转换?或者它只是你在代码中显示的方式,即从BQ读取,然后在BQ中启动update命令?那样的话,你根本不需要光束。只需使用BQ query更新使用另一个表的表中的数据。BQ best practices建议避免一次插入/更新单行。在
相关问题 更多 >
编程相关推荐