数据流:使用python pipelin更新BigQuery行

2024-06-16 09:37:01 发布

您现在位置:Python中文网/ 问答频道 /正文

想象一下一个简单的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();

Tags: fromioread管道usebigqueryquerydataset
1条回答
网友
1楼 · 发布于 2024-06-16 09:37:01

在阅读BQ之后,您是否使用beam管道进行进一步的转换?或者它只是你在代码中显示的方式,即从BQ读取,然后在BQ中启动update命令?那样的话,你根本不需要光束。只需使用BQ query更新使用另一个表的表中的数据。BQ best practices建议避免一次插入/更新单行。在

相关问题 更多 >