Mapreduce 将一个pcollection用作另一个pcollection的输入

Mapreduce 将一个pcollection用作另一个pcollection的输入,mapreduce,google-bigquery,google-cloud-dataflow,apache-beam,Mapreduce,Google Bigquery,Google Cloud Dataflow,Apache Beam,在google dataflow中使用python sdk,我想做如下查询: query_a_和_b=“从表a中选择a、b” 此查询返回要用于执行更多查询的元组列表: query_param=从表a中选择*,其中a={}和b={}.format(a,b) (这里我设置了表A,但它也将用于与表A内部连接的表B、C和D…) 所以我想做的是: coll=(p |'read a_b_tuples'>>beam.io.read(beam.io.BigQuerySource(query=query_a_和_

在google dataflow中使用python sdk,我想做如下查询:

query_a_和_b=“从表a中选择a、b”

此查询返回要用于执行更多查询的元组列表:

query_param=从表a中选择*,其中a={}和b={}.format(a,b) (这里我设置了表A,但它也将用于与表A内部连接的表B、C和D…)

所以我想做的是:

coll=(p
|'read a_b_tuples'>>beam.io.read(beam.io.BigQuerySource(query=query_a_和_b,使用标准_sql=True))
|'Build SQL'>>beam.Map(lambda x:query_param.format(x['a'],x['b']))
|'Query pardo'>>beam.pardo(lambda q:[beam.io.Read(beam.io.BigQuerySource(Query=q,use\u standard\u sql=True)))
|'Save'>>beam.io.WriteToText('results.csv')
)
我不确定这是最好的方法,它不起作用。在数据流中实现这一点的首选方法是什么

最终,这些查询中的每一个都将返回少量的行(少于5k),我希望将这些行加载到pandas数据帧中进行过滤/处理,然后将每个元组(a,B)的所有表a、B、C、d组合起来,并将每个元组数据场写入csv文件,以获得结果


从某种意义上说,我可能不正确地映射减少了问题,我可以使用beam函数按a和b分组,然后进行处理…?

beam还不直接支持BigQuery。其他一些转换支持类似的用例,例如,
JdbcIO.readAll()
可以查询数据库中的一组查询参数,
TextIO.readAll()
可以读取一组文件名,但是
BigQueryIO
在Java和Python SDK中都没有这样做


在“QueryPardo”中,您可以显式地与-对话,这应该没问题,因为您的查询返回少量结果。

Beam还不直接支持BigQuery。其他一些转换支持类似的用例,例如,
JdbcIO.readAll()
可以查询数据库中的一组查询参数,
TextIO.readAll()
可以读取一组文件名,但是
BigQueryIO
在Java和Python SDK中都没有这样做


在你的“询问帕尔多”中,相反,您可以显式地与-这应该没问题,因为您的查询只返回少量结果。

难道您不能使用公共表表达式将SQL查询写入BigQuery,并在SQL+中执行所有联接,使用UNION all组合结果,以便将Apache Beam的复杂性降至最低吗(+您将有单一来源)由于计算量大,查询会有点复杂。我们有5个不同的表,具有不同的结构。独立处理它们和合并聚合结果似乎更容易。我已经有一些代码可以在其中一个(a,b)上运行手动创建元组,因此我只想迭代所有其他元组,并利用数据流自动扩展。难道您不能使用公共表表达式将SQL查询写入BigQuery,并在SQL+中执行所有连接,使用UNION all组合结果,以便将Apache Beam的复杂性降至最低吗(+您将有单一来源)由于计算量大,查询会有点复杂。我们有5个不同的表,具有不同的结构。独立处理它们和合并聚合结果似乎更容易。我已经有一些代码可以在其中一个(a,b)上运行手动创建元组,因此我只想遍历所有其他元组,并利用数据流自动扩展。这意味着我需要实现指数回退以及sdk中免费提供的一些其他功能……而不是我需要的:(这意味着我需要实现指数退避和sdk中免费提供的一些其他功能……而不是我需要的:(