在启动 API dataflow.projects.locations.templates.launch(我也测试过“create”api)之后,在 dataprep 上生成了一个模板,使用 today() 函数生成了一个列(我也测试了“now()” function) 似乎在作业执行期间没有被评估。报告的日期始终填写第一次创建模板的日期。
这是正确的行为吗?为什么该列未填充作业启动的日期?
在启动 API dataflow.projects.locations.templates.launch(我也测试过“create”api)之后,在 dataprep 上生成了一个模板,使用 today() 函数生成了一个列(我也测试了“now()” function) 似乎在作业执行期间没有被评估。报告的日期始终填写第一次创建模板的日期。
这是正确的行为吗?为什么该列未填充作业启动的日期?
这确实是预期的行为,这实际上记录在有关在 Cloud Dataflow 上运行 Dataprep 作业的文档页面的“已知限制”部分中:
从 Cloud Dataprep by TRIFACTA 作业生成的 Cloud Dataflow 模板旨在用作当时执行的作业的静态副本。
- 所有相关函数都是根据执行时刻计算的。执行 Cloud Dataflow 模板时,不会重新计算 NOW() 和 TODAY 等函数。
- 要更新这些函数的输出值,请通过 UI 或计划的作业在 Cloud Dataprep by TRIFACTA 中重新运行作业。然后,执行 Cloud Dataflow 模板作业。
因此,正如上面文档片段中所建议的,为了获得TODAY()
/NOW()
函数的当前值,您需要在 Dataprep 中重新运行作业并执行模板。
旁注:如果您有兴趣了解为什么会出现这种行为,我建议您阅读Dataflow 模板文档,尽管您可以将其视为信息数据,因为这不适用于 Dataprep 模板(无法自定义)。一个函数,例如TODAY()
或NOW()
应该作为运行时参数传递,因为值会在执行时发生变化;为了启用运行时参数,Dataflow 提供了ValueProvider
接口。