从云端功能触发数据流管道时,无法执行来自主类的多个功能

时间:2019-08-07 13:26:19

标签: python-2.7 function google-bigquery google-cloud-dataflow

由于我在WriteToBigQuery操作之后执行一些任务,因此我编写了两个单独的函数,并在主类中执行它们以依次运行数据流管道。我已经在云存储上创建了相同的模板,并试图从云功能触发此自定义管道模板,但是它直接执行第二个功能,而不是第一个功能。

这是我的主班:

if __name__ == '__main__':
    print "Starting Dataflow Pipeline"
    writetobq()
    writetocsv()

一些云功能代码:

BODY = {
        "jobName": "{jobname}".format(jobname=JOBNAME),
        "parameters": {
        },
        "environment": {
            "tempLocation": "gs://{bucket}/temp".format(bucket=BUCKET),
            "zone": "europe-west1-b"
        }
    }
request = service.projects().templates().launch(projectId=PROJECT, gcsPath=GCSPATH, body=BODY)
response = request.execute()

在触发此管道时,我没有收到任何错误,但它仅执行writetocsv(),我希望它首先应执行writetobq(),然后执行writetocsv()。如果我在本地运行此管道代码,那么它将给我预期的输出。

1 个答案:

答案 0 :(得分:0)

数据流模板(我认为这就是模板的意思)不会执行您的主类。它只是存储一个Dataflow管道并执行该管道。因此,如果您需要将第二个功能作为模板的一部分执行,则它必须是管道的一部分(例如,ParDo步骤)。

在您看来,您似乎需要WriteToBigQuery'. Unfortunately this is not possible today since WriteToBigQuery`步骤后面的内容不会返回结果。

是否可以从启动模板的代码中添加执行第二个功能(作为本地执行还是第二个Dataflow作业)?