google-cloud-dataflow - GCP Dataflow API 不评估在 dataprep 上编写的配方中调用的 now/today() 函数
问题描述
在启动 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
接口。
推荐阅读
- python - 查找具有空字符串的字段
- javascript - 如何使 svg 交互以收集对描绘元素的评论/注释
- c# - 选择值时,下拉列表未在代码后面发布数据
- python - 尝试将 PyTorch 模型导出到 ONNX 时崩溃:forward() 缺少 1 个必需的位置参数
- swiftui - SwiftUI:为什么没有显示第二个警报?
- c++ - 为什么 GCC 不能为两个 int32 的结构生成最佳 operator==?
- c - 在c中将浮点数更改为整数
- javascript - 如何防止 SVG JavaScript 图像被截断?
- javascript - Firebase .update() 返回未定义,它不应该返回更新的对象吗?
- r - 使用聚集时如何更改构面的顺序?