我有一个云函数,它使用数据流 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 界面执行的:
这是配方中负责创建时间戳的部分:
最后,这是在 BigQuery 表中插入的内容,其中具有相同时间戳(第 4 行)的第一个插入对应于从 Dataprep 执行的作业,其余的是使用 Dataflow API 从云函数执行:
所以问题是我是否有办法让时间戳在插入作业执行期间得到解决,因为现在它看起来像是在模板的配方中固定的。
提前感谢您的帮助。