Google bigquery 如何在python数据流中将PCollection转换为列表

Google bigquery 如何在python数据流中将PCollection转换为列表,google-bigquery,google-cloud-dataflow,apache-beam,Google Bigquery,Google Cloud Dataflow,Apache Beam,我有一个包含ID字段的PCollectionP1。我希望将PCollection中完整ID的列作为列表,并将此值传递给BigQuery查询,以过滤一个BigQuery表 最快和最优化的方法是什么 我不熟悉数据流和BigData。有人能给点提示吗 谢谢 我从您的问题中了解到,您希望根据您在P1中的ID构建SQL语句。这是如何实现这一目标的一个示例: sql = """select ID from `table` WHERE ID IN ({})""" with beam.Pipeline(opti

我有一个包含ID字段的PCollection
P1
。我希望将PCollection中完整ID的列作为列表,并将此值传递给BigQuery查询,以过滤一个BigQuery表

最快和最优化的方法是什么

我不熟悉数据流和BigData。有人能给点提示吗


谢谢

我从您的问题中了解到,您希望根据您在
P1
中的ID构建SQL语句。这是如何实现这一目标的一个示例:

sql = """select ID from `table` WHERE ID IN ({})"""
with beam.Pipeline(options=StandardOptions()) as p:
         (p | 'Create' >> beam.Create(['1', '2', '3']) 
            | 'Combine' >> beam.combiners.ToList()
            | 'Build SQL' >> beam.Map(lambda x: sql.format(','.join(map(lambda x: '"' + x + '"', x))))
            | 'Save' >> beam.io.WriteToText('results.csv'))
结果:

select ID from `table` WHERE ID IN ("1","2","3")
操作
beam.combiners.ToList()
将整个PCollection数据转换为一个列表(稍后我使用该列表插入SQL占位符)

现在可以使用文件
results.csv-00000-to-000001
中的SQL对BQ运行此查询


我不确定是否可以直接在PCollection中运行此查询(类似于
(p | all transformations | beam.io.Write(beam.io.BigQuerySink(result sql))
)。我认为从最终结果文件读取,然后对BQ发出查询是这里最好的方法。

使用BigQuery接收器:
beam.combiners.ToDict
是另一个与
beam.combiners.ToList
相关的CombineFn,更准确地说,
beam.combiners.ToList()
创建一个PCollection,其中包含一个条目-该条目就是您想要的列表。然后,您可以从一台工作计算机访问该列表,例如,如上所述,使用
beam.Map
。如果不将该列表存储在某个位置,则无法直接将其返回给管理器,例如,在WriteToText si中上面是nk。