Google bigquery 如何在python数据流中将PCollection转换为列表
我有一个包含ID字段的PCollectionGoogle 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
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。