2

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

我设法从数据流 API 运行作业,并且数据已正确插入到 bigquery 表中,但是在时间戳字段中,时间戳的值始终相同,它对应于我所在作业的执行时间从(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 界面执行的:

数据流控制台快照

这是配方中负责创建时间戳的部分:

Dataprep 配方示例

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

大查询插入

所以问题是我是否有办法让时间戳在插入作业执行期间得到解决,因为现在它看起来像是在模板的配方中固定的。

提前感谢您的帮助。

4

1 回答 1

0

如果我理解正确,这是记录在案的行为。通过 Dataflow 运行 Dataprep 模板时的已知限制列表:

所有相关函数都是根据执行时刻计算的。执行 Cloud Dataflow 模板时,不会重新计算 NOW() 和 TODAY 等函数。

于 2019-05-01T11:17:45.103 回答