仅在apache数据流的同一管道中执行了上一步后,才执行某些步骤

时间:2019-05-03 10:15:31

标签: google-cloud-platform google-cloud-dataflow dataflow

我想在几个开始步骤之后执行几个步骤。 例如:以我为例,我想先执行3个步骤,然后执行最后2个步骤。

这3个步骤完成执行后,我要开始最后2个步骤。

with beam.Pipeline(options=pipeline_options) as p1:
    data_csv = p1 | 'Read CSV file' >> ReadFromText(known_args.input_csv_file)
    dict1 = (data_csv | 'Format to json' >> (beam.ParDo(Split())))
    (dict1 | 'Write to BigQuery' >> beam.io.WriteToBigQuery(
                                        known_args.output_stage_bq,
                                        schema=product_revenue_schema
                                        ))
    fullTable = (p1 | 'ReadFromBQ' >> beam.io.Read(beam.io.BigQuerySource(table_spec)))
    (fullTable | 'writeToBQ another dataset' >> beam.io.WriteToBigQuery(known_args.output_target_bq,
                            schema = product_revenue_schema))

预期:1:Step1-> step2-> step3-> step4-> step5

实际:1:Step1-> Step2-> Step3         2:Step4-> Step5

1 个答案:

答案 0 :(得分:0)

在Beam Java SDK中,您需要的是Wait转换。

在Beam Python SDK中,目前没有此类转换。您应该使用两个单独的管道并手动同步它们(例如,等待第一个管道完成,然后再启动第二个管道,或者从第一个管道发送pubsub消息以向第二个管道发送信号,表明已完成写入。)