使用Dataflow API执行Dataprep模板可保存流程配方中包含的时间戳

时间:2018-06-05 22:40:25

标签: google-bigquery google-cloud-functions google-cloud-dataflow google-cloud-dataprep

我有一个云功能,它使用数据流API从我使用DataPrep创建的模板创建新作业。该配方基本上清理了一些JSON对象,将它们转换为CSV格式,并添加时间戳列以获取BigQuery数据库中的所有内容。主要想法是对我们平台的某些信息进行快照。

我设法从数据流API运行作业,并且数据正确插入bigquery表中,但是在timestamp字段中,timestamp的值始终相同,并且它对应于来自我从(DataPrep模板)获取模板的工作。当我从dataprep接口运行作业时,正确插入了此时间戳,但是当我使用云功能中的相同模板执行作业时,它不会更改。

调用数据流API的代码片段:

dataflow.projects.templates.launch({
   projectId: projectId,
   location: location,
   gcsPath: jobTemplateUrl,
   resource: {
     parameters: {
       inputLocations : `{"location1" :"gs://${file.bucket}/${file.name}"}`,
       outputLocations: `{"location1" : "${location2}"}`,
       customGcsTempLocation: `gs://${destination.bucket}/${destination.tempFolder}`
     },
      environment: {
        tempLocation: `gs://${destination.bucket}/${destination.tempFolder}`,
        zone: "us-central1-f"
     },
     jobName: 'user-global-stats-flow',

   }
 }

这是Dataflow执行控制台快照,因为可以看到最新的作业是从云功能执行的作业,底部的作业是从Dataprep接口执行的:

Dataflow console snapshot

这是负责创建时间戳的食谱的一部分:

Dataprep recipe sample

最后,这是在BigQuery表中插入的内容,其中第一个具有相同时间戳(第4行)的插入对应于从Dataprep执行的作业,其余是使用Dataflow API从云函数执行:< / p>

Big Query Insertions

所以问题是我是否可以在插入的作业执行时间内使时间戳得到解决,因为现在它看起来已经在模板的配方中修复了。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,则记录为这种行为。从known limitations when running a Dataprep template through Dataflow的列表中:

  

所有相关功能均基于执行时刻进行计算。执行Cloud Dataflow模板时,NOW()和TODAY之类的函数不会重新计算。