Google Cloud Dataflow Python,检索作业 ID

jmo*_*255 3 python google-cloud-platform google-cloud-dataflow

我目前正在使用Python处理数据流模板,我想访问作业 ID 并使用它来保存到特定的 Firestore 文档。

是否可以访问作业 ID?

我在文档中找不到与此相关的任何内容。

Gui*_*ins 6

您可以通过dataflow.projects().locations().jobs().list从管道内调用来实现(请参阅下面的完整代码)。一种可能性是始终使用相同的作业名称调用模板,这是有意义的,否则作业前缀可以作为运行时参数传递。应用正则表达式解析作业列表以查看作业是否包含名称前缀,如果包含,则返回作业 ID。如果有多个,它只会返回最新的(当前正在运行的)。

在定义PROJECTBUCKET变量后,模板被暂存:

python script.py \
    --runner DataflowRunner \
    --project $PROJECT \
    --staging_location gs://$BUCKET/staging \
    --temp_location gs://$BUCKET/temp \
    --template_location gs://$BUCKET/templates/retrieve_job_id
Run Code Online (Sandbox Code Playgroud)

然后,myjobprefix在执行模板化作业时指定所需的作业名称(在我的情况下):

gcloud dataflow jobs run myjobprefix \
   --gcs-location gs://$BUCKET/templates/retrieve_job_id
Run Code Online (Sandbox Code Playgroud)

retrieve_job_id函数将从作业中返回作业 ID,更改job_prefix以匹配给定的名称。

gcloud dataflow jobs run myjobprefix \
   --gcs-location gs://$BUCKET/templates/retrieve_job_id
Run Code Online (Sandbox Code Playgroud)

  • 如果我们运行两个具有相似前缀的作业,这种方法虽然适用于小规模,但会遇到挑战。例如,我们通常将作业名称创建为 PREFIX+TIMESTAMP。这有助于我们并行运行两个或多个作业。但是,如果我们使用此解决方案技术,我们无法区分具有相同前缀的 2 个作业。 (2认同)