首页 > 解决方案 > GCP Dataflow API 不评估在 dataprep 上编写的配方中调用的 now/today() 函数

问题描述

在启动 API dataflow.projects.locations.templates.launch(我也测试过“create”api)之后,在 dataprep 上生成了一个模板,使用 today() 函数生成了一个列(我也测试了“now()” function) 似乎在作业执行期间没有被评估。报告的日期始终填写第一次创建模板的日期。

这是正确的行为吗?为什么该列未填充作业启动的日期?

标签: google-cloud-dataflowgoogle-cloud-dataprep

解决方案


这确实是预期的行为,这实际上记录在有关在 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接口。


推荐阅读