如我之前的 post 所述,我试图将单个文件的名称从Cloud Function传递到Dataflow。如果我一次在GCS存储桶中上传多个文件怎么办?是否可以使用 event.data 捕获单个云功能并发送所有文件名?如果没有其他方式,我可以在我的数据流程序中获取这些文件名吗?
谢谢
答案 0 :(得分:0)
要在单个管道中运行此操作,您需要创建一个自定义源,该源包含文件名列表(或单个字符串,即连接的文件名等),然后将该源与适当的运行时PipelineOption一起使用
答案 1 :(得分:0)
这种方法面临的挑战是,只有客户端(可能)知道有多少文件以及何时完成上传。发送到云功能的事件将至少一次(意味着您可能偶尔会获得多个事件),并且事件可能会发生故障。即使云功能以某种方式知道它预期有多少文件,您可能会发现由于竞争条件检查云存储而难以保证只有一个云功能触发数据流(例如,多个功能可能“认为”它们是最后一个)。云存储(AFAIK)中没有“批处理”语义会导致单个函数调用(存在批处理API,但事件是从单个“对象”更改发出的,因此即使批量写入N个文件也会导致-least-N events)。
在上传所有文件后,让客户端手动触发云功能或数据流可能会更好。您可以直接通过HTTP触发云功能,也可以将一个标记值写入云存储以触发功能。
另一种方法是将文件打包到客户端的单个上传中(例如tar),但我可能有理由说明这对你的用例没有意义。